Django:html模板操作错误和"没有这样的表"

时间:2017-08-04 22:51:18

标签: python html django database web

我遵循Obeythetestinggoat.com(Win7,Django 1.11,Python 3.6.1)的教程,并在尝试手动访问本地站点时遇到一些问题。当我在Chrome浏览器窗口中运行python manage.py runserver并打开localhost:8000时,出现以下错误:

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

浏览器窗口中的输出显示有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没有帮助。

  4. 以下是views.py应用的accounts

    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('/')
    

    以下是models.py应用的accounts

    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)
    

2 个答案:

答案 0 :(得分:0)

您是否通过python控制台运行了makemigration和migrate命令?我认为您的模型更改尚未填充到您的数据库中。

$ python manage.py makemigrations your_app_label

然后运行

$ python manage.py migrate

您可以在此处阅读更多内容https://docs.djangoproject.com/en/1.11/topics/migrations/

答案 1 :(得分:0)

同一本书的同一部分,我有相同的问题。该错误会在登录前在Chrome中弹出,但在登录后会在所有浏览器中弹出。这是一个数据库问题,仅在手动运行服务器时弹出。

要修复,请使用:

python manage.py makemigrations
python manage.py migrate

如果migrate有任何错误,请清除测试数据库并再次运行迁移:

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