Django表单未验证

Django表单未验证,django,Django,我正在使用GroundUp教程中的django制作一个名为Startthedark的应用程序,但我遇到了一个错误 我会尽可能清楚地解释这个错误。对不起,如果我不能 我的应用程序显示一个文本框,询问描述,当我提交描述时,它会将我重定向到另一个显示最新描述的页面,而不是将我重定向到同一页面 现在我认为问题出在我的views.py上,因为数据无效,所以它只会把我带回同一个页面,而且它不会提交到管理页面的事件模型中 我的观点 from events.models import Event from

我正在使用GroundUp教程中的django制作一个名为Startthedark的应用程序,但我遇到了一个错误

我会尽可能清楚地解释这个错误。对不起,如果我不能

我的应用程序显示一个文本框,询问描述,当我提交描述时,它会将我重定向到另一个显示最新描述的页面,而不是将我重定向到同一页面

现在我认为问题出在我的views.py上,因为数据无效,所以它只会把我带回同一个页面,而且它不会提交到管理页面的事件模型中

我的观点

 from events.models import Event
 from django.shortcuts import render_to_response
 from django.template import RequestContext
 from events.forms import EventForm
 from django.core.urlresolvers import reverse
 from django.http import HttpResponseRedirect


 def tonight(request):
     events = Event.objects.filter(latest=True)
     return render_to_response('events/tonight.html',{'events':events},context_instance = RequestContext(request))


 def create(request):
     form = EventForm(request.POST or None)
     if form.is_valid():
         event = form.save(commit=False) 
         event.creator = request.user
         guessed_date = None
         event.start_date = guessed_date
         event.save()
         request.user.message_set.create(message='Your event was posted')
         if 'next' in request.POST:
             next = request.POST['next']
         else:
             next = reverse('ev_tonight')
         return HttpResponRedirect(next)
     return render_to_response(
         'events/create.html',
         {'form':form},
         context_instance = RequestContext(request)
     )
我的表格.py

 from django import forms
 from events.models import Event
 class EventForm(forms.ModelForm):
     description = forms.CharField(max_length=340,widget=forms.Textarea)

     class Meta:
         model = Event
         fields = ('description',)
我的URL.conf

 from django.conf.urls.defaults import *
 from django.contrib import admin
 from events import views
 urlpatterns = patterns('events.views',
         url(r'^tonight/$','tonight',name='ev_tonight'),
         url(r'^create/$','create',name='ev_create'),
 )
我的模特

  from django.db import models
 from datetime import datetime, timedelta
 from django.contrib.auth.models import User
 from django.db.models.query import QuerySet


 class Event(models.Model):
     description = models.TextField()
     creation_date = models.DateTimeField(default = datetime.now)
     start_date = models.DateTimeField(null=True, blank= True)
     creator = models.ForeignKey(User , related_name = 'event_creator_set')
     attendees = models.ManyToManyField(User , through = "Attendance")
     latest = models.BooleanField(default=True)
     def __unicode__(self):
         return self.description
     def save(self, **kwargs):
         now = datetime.now()
         start = datetime.min.replace(year = now.year , month=now.month,day=now.day)
         end = (start + timedelta(days=1)) - timedelta.resolution
         Event.objects.filter(latest=True,      creator=self.creator).filter(creation_date__range=(start,end)).update(latest=False)
         super(Event,self).save(**kwargs)

 class Attendance(models.Model):
     user = models.ForeignKey(User)
     event = models.ForeignKey(Event)
     registration_date = models.DateTimeField(default=datetime.now)

     def __unicode__(self):
         return "%s is attending %s" %(self.user.username,self.event)
My create.html

  {% extends "tin.html" %}
  {% block title %}Create - {{ block.super }}{% endblock %}
  {% block main_content %}
          <form method = "POST' action"">
              <ul>
              {{ form.as_ul }}
          </ul>
          <input type = "submit" value="Create Event" />
      </form>
  {% endblock %}                
{%extends“tin.html”%}
{%block title%}创建-{{block.super}{%endblock%}
{%block main_content%}

看起来您需要修复模板。表单标签似乎有误。您没有正确关闭method属性,您使用了单引号而不是双引号。这就是表单使用表单数据发出GET请求的原因

{% extends "tin.html" %}
{% block title %}Create - {{ block.super }}{% endblock %}
{% block main_content %}
    <form method="POST" action"">
        {% csrf_token %}
        <ul>
            {{ form.as_ul }}
        </ul>
        <input type = "submit" value="Create Event" />
    </form>
{% endblock %}
{%extends“tin.html”%}
{%block title%}创建-{{block.super}{%endblock%}
{%block main_content%}
{%csrf_令牌%}
    {{form.as_ul}}
{%endblock%}
看起来您需要修复模板。表单标签似乎有误。您没有正确关闭method属性,您使用了单引号而不是双引号。这就是表单使用表单数据发出GET请求的原因

{% extends "tin.html" %}
{% block title %}Create - {{ block.super }}{% endblock %}
{% block main_content %}
    <form method="POST" action"">
        {% csrf_token %}
        <ul>
            {{ form.as_ul }}
        </ul>
        <input type = "submit" value="Create Event" />
    </form>
{% endblock %}
{%extends“tin.html”%}
{%block title%}创建-{{block.super}{%endblock%}
{%block main_content%}
{%csrf_令牌%}
    {{form.as_ul}}
{%endblock%}

你能告诉我们
事件/create.html
是什么样子吗?下一步可能设置在表单中。如果不是,那么它会使用“ev_今晚”的url。另外,你是我今天看到的第二个在做这个特定教程时遇到问题的人。Django有一个非常好的初学者教程,如果这个教程给你带来麻烦的话。是的,我完成了那个教程,我还发布了我的create.html。感谢您的帮助。如果请求中的“下一步”是
。POST:
可能会在以后的教程中使用。目前我看不到有人在使用它,而且由于检查在
if
语句中得到了正确处理,您现在不必担心它。您能告诉我们
events/create.html
是什么样子吗?下一步可能设置在表单中。如果不是,那么它会使用“ev_今晚”的url。另外,你是我今天看到的第二个在做这个特定教程时遇到问题的人。Django有一个非常好的初学者教程,如果这个教程给你带来麻烦的话。是的,我完成了那个教程,我还发布了我的create.html。感谢您的帮助。如果请求中的“下一步”是
。POST:
可能会在以后的教程中使用。目前我看不到有人在使用它,因为检查在
if
语句中得到了正确处理,所以现在你不必担心它。很好的补充,我没有看到:)也许我需要更多concentrate@donkeyboy72因此,您启用了csrf中间件。这意味着每个表单都必须包含一个csrf令牌,或者视图必须用
csrf\u employ
装饰。我将修复我的答案以包含令牌。好的,我收到了消息“'User'对象没有属性'message_set'”,我修复了csrf。通过放置由此行引起的{%csrf\u token%}
request.user.message\u set.create(message='Your event was posted')
您可能错过了一个步骤,从这个错误来看,django似乎希望您拥有一个消息模型,其中包含一个外键字段,该字段对用户而言具有
related_name=“message\u set”
良好的跟踪效果,我没有看到:)也许我需要更多concentrate@donkeyboy72因此,您启用了csrf中间件。这意味着每个表单都必须包含一个csrf令牌,或者视图必须用
csrf\u employ
装饰。我将修复我的答案以包含令牌。好的,我收到了消息“'User'对象没有属性'message_set'”,我修复了csrf。通过放置由此行
request.user.message\u set.create(message='Your event was posted')
引起的{%csrf\u token%},您可能错过了一个步骤,从这个错误来看,django似乎希望您拥有一个消息模型,其中包含一个外键字段,该字段对应于用户
related\u name=“message\u set”
是的,我没有看到您的模板代码。我刚刚读了你的观点。迎头赶上Ngenator@catherine你能给我发送一些django注册应用定制的链接吗?我想添加一些额外的字段和社交登录also@masterofdestiny注册:@catherine我已经通过添加额外内容来定制django注册fields@masterofdestiny对不起,我不是开玩笑的使用第三方应用程序。我不知道自定义django注册是的,我没有看到你的模板代码。我刚刚读了你的观点。迎头赶上Ngenator@catherine你能给我发送一些django注册应用定制的链接吗?我想添加一些额外的字段和社交登录also@masterofdestiny注册:@catherine我已经通过添加额外内容来定制django注册fields@masterofdestiny对不起,我不是开玩笑的使用第三方应用程序。我不知道你是怎么注册的