簡體   English   中英

Django:html模板的操作錯誤,“沒有這樣的表”

[英]Django: Operational Error with html template and “no such table”

我正在遵循Obeythetestinggoat.com(Win7,Django 1.11,Python 3.6.1)的教程,當嘗試手動訪問本地站點時遇到一些問題。 當我運行python manage.py runserver並在Chrome瀏覽器窗口中打開localhost:8000時,出現以下錯誤:

django.db.utils.OperationalError: no such table: accounts_user

瀏覽器窗口中的輸出Error during template rendering發生Error during template rendering

這是它試圖呈現的模板片段:

    <div class="container">
    <nav class="navbar navbar-default" role="navigation">
        <div class="container-fluid">
            <a class="navbar-brand" href="/">Superlists</a>
            {% if user.email %}
                <ul class="nav navbar-nav navbar-right">
                    <li class="navbar-text">Logged in as {{ user.email }}</li>
                    <li><a href="#">Log out</a></li>
                </ul>
            {% else %}
                <form class="navbar-form navbar-right" 
                        method="POST" 
                        action="{% url 'send_login_email' %}">
                    <span>Enter email to log in:</span>
                    <input class="form-control" name="email" type="text"/>
                    {% csrf_token %}
                </form>
            {% endif %}
        </div>
    </nav>


    {% if messages %}
        <div class="row">
            <div class="col-md-8">
                {% for message in messages %}
                    {% if message.level_tag == 'success' %}
                        <div class="alert alert-success">{{ message }}</div>
                    {% else %}
                        <div class="alert alert-warning">{{ message }}</div>
                    {% endif %}
                {% endfor %}
            </div>
        </div>
    {% endif %}
    </div>

我認為問題出在{% user.email %}因為直到我將它們添加到模板中時,這些特定錯誤才會出現。 雖然,有些事情對此似乎很奇怪:

  1. 我所有的功能測試都順利通過了。

  2. {% messages %}沒有任何問題。 抱歉,我不知道這些{% things %}被稱為。

  3. makemigrationsmigrate沒有幫助。

這是accounts應用程序的views.py

from django.shortcuts import redirect
from django.contrib import auth, messages
from django.core.mail import send_mail
from django.core.urlresolvers import reverse
from accounts.models import Token


def send_login_email(request):
    email = request.POST['email']
    token = Token.objects.create(email=email)
    url = request.build_absolute_uri(
        reverse('login') + '?token=' + str(token.uid)
    )
    message_body = f'Use this link to log in:\n\n{url}'
    send_mail(
        'your login link for Superlists',
        message_body,
        'noreply@superlists',
        [email]
    )

    messages.success(
        request,
        "Check your email, we've sent you a link you can use to log in.")
    return redirect('/')

def login(request):
    user = auth.authenticate(uid=request.GET.get('token'))
    if user:
        auth.login(request, user)
    return redirect('/')

這是accounts應用程序的models.py

from django.contrib import auth
from django.db import models
import uuid

auth.signals.user_logged_in.disconnect(auth.models.update_last_login)

class User(models.Model):
    email = models.EmailField(primary_key=True)
    REQUIRED_FIELDS = []
    USERNAME_FIELD = 'email'
    is_anonymous = False
    is_authenticated = True

class Token(models.Model):
    email = models.EmailField()
    uid = models.CharField(default=uuid.uuid4, max_length=40)

您是否通過python控制台運行了makemigration和migration命令? 我認為您的模型更改尚未填充到您的數據庫中。

$ python manage.py makemigrations your_app_label

然后跑

$ python manage.py migrate

您可以在這里閱讀更多內容https://docs.djangoproject.com/en/1.11/topics/migrations/

在同一本書的同一部分,我遇到了同樣的問題。 該錯誤會在登錄前在Chrome中彈出,但在登錄后會在所有瀏覽器中彈出。 這是一個數據庫問題,僅在手動運行服務器時彈出。

要修復,請使用:

python manage.py makemigrations
python manage.py migrate

如果您有任何錯誤migrate ,消除你的測試數據庫,然后再次運行遷移:

rm db.sqlite3
python manage.py migrate --noinput

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM