2017-08-04 80 views
0

我正在遵循从Obeythetestinggoat.com(Win7,Django 1.11,Python 3.6.1)的教程,并有一些问题,当我尝试手动访问本地站点。当我运行python manage.py runserver并在Chrome浏览器窗口中打开localhost:8000,我得到以下错误:Django:操作错误与HTML模板和“没有这样的表”

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没有帮助。

这里是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, 
     '[email protected]', 
     [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) 

回答

0

你有没有跑makemigration并通过迁移命令python控制台?我认为您的模型更改尚未填充到您的数据库中。

$ python manage.py makemigrations your_app_label 

然后运行

$ python manage.py migrate 

你可以在这里阅读更多https://docs.djangoproject.com/en/1.11/topics/migrations/

+0

是啊,我都试过和它说,'没有在“accounts''和检测到的变化有没有'迁移申请' – user1964692

相关问题