Django18初体验
1127 浏览 5 years, 11 months
11.14 视图中的表单
版权声明: 转载请注明出处 http://www.codingsoho.com/https://docs.djangoproject.com/en/1.8/ref/forms/
from .forms import SignUpForm
from .models import SignUp
# Create your views here.
def home(request):
title = 'Welcome'
form = SignUpForm(request.POST or None)
context = {
"title": title,
"form": form
}
if form.is_valid():
#form.save()
#print request.POST['email'] #not recommended, raw data without validation
instance = form.save(commit=False)
#
full_name = form.cleaned_data.get("full_name")
if not full_name:
full_name = "New full name"
instance.full_name = full_name
# if not instance.full_name:
# instance.full_name = "Justin"
instance.save()
context = {
"title": "Thank you"
}
return render(request, "home.html", context)
form = SignUpForm(request.POST or None)这句话中记得加 or None,否则的话SignUpForm会一直执行Validation
即使只是网址GET访问,也会出现下列validation错误
调用form.is_valid,form会执行form类里面的那些validation函数
form.save(commit=False)并不会真正的保存数据 ,instance.save()才会真正保存
This save() method accepts an optional commit keyword argument, which accepts either True or False. If you call save() with commit=False, then it will return an object that hasn’t yet been saved to the database. In this case, it’s up to you to call save() on the resulting model instance.
home.html
<h1>{{title}}</h1>
{{user}}
{{request.user}}
<form method="POST" action=''> {% csrf_token%}
{{form.as_p}}
<input type="submit" value="sign up">
</form>
action指定了提交之后的重定向地址,可以用”.”
as_p = as paragraph
GET vs POST
Home函数里添加下列打印
print request
print request.POST
在shell里面查看打印输出
如果只是执行网址访问http://127.0.0.1:8000/
<WSGIRequest: GET '/'>
<QueryDict: {}>
如果按”sign up”提交
<WSGIRequest: POST '/'>
<QueryDict: {u'csrfmiddlewaretoken': [u'xcdCoiISxk5yS4GSbVHENmjWwnhvj7kk'], u'email': [u'bin@gmail.edu'], u'full_name': [u'bin']}>