Python新手使用的Django架站的16堂课 — 第八章(五)
page247
ch0831www
python manage.py runserver 192.168.99.218:8080
8.3 模型窗体类 ModelForm的应用
####### 修改 urls.py
from django.conf.urls import include, url
from django.contrib import admin
from mysite import views
urlpatterns = [
url(r'^$', views.index),
url(r'^(\d+)/(\w+)/$', views.index),
url(r'^list/$',views.listing),
url(r'^post/$',views.posting),
url(r'^contact/$', views.contact),
url(r'^post2db/$', views.post2db),
url(r'^admin/', include(admin.site.urls)),
]
####### 修改 views.py
def post2db(request):
template = get_template('post2db.html')
post_form = forms.PostForm()
moods = models.Mood.objects.all()
message = '如果要张贴信息,那么每一个字段都要填...'
request_context = RequestContext(request)
request_context.push(locals())
html = template.render(request_context)
return HttpResponse(html)
修改 forms.py
class PostForm(forms.ModelForm):
class Meta:
model = models.Post
fields = ['mood', 'nickname', 'message', 'del_pass']
def __init__(self, *args, **kwargs):
super(PostForm, self).__init__(*args, **kwargs)
self.fields['mood'].label = '现在心情'
self.fields['nickname'].label = '你的昵称'
self.fields['message'].label = '心情留言'
self.fields['del_pass'].label = '设置密码'
添加 post2db.html
<!-- post2db.html (ch08www project) -->
{% extends "base.html" %}
{% block title %}我有话要说{% endblock %}
{% block content %}
<div class='container'>
{% if message %}
<div class='alert alert-warning'>{{ message }}</div>
{% endif %}
<form name='my form' action='.' method='POST'>
{% csrf_token %}
<table>
{{ post_form.as_table }}
</table>
<input type='submit' value='张贴' onclick='this.disabled=true,this.form.submit()'>
<input type='reset' value='清除重填'>
</form>
</div>
{% endblock %}
修改 views.py
def post2db(request):
if request.method == 'POST':
post_form = forms.PostForm(request.POST)
if post_form.is_valid():
message = "您的信息已保存,要等管理员启用后才看得到。"
post_form.save()
return HttpResponseRedirect('/list/')
else:
message = '如要张贴信息,则每一个字段都要填...'
else:
post_form = forms.PostForm()
message = '如要张贴信息,则每一个字段都要填...'
template = get_template('post2db.html')
request_context = RequestContext(request)
request_context.push(locals())
html = template.render(request_context)
return HttpResponse(html)
可以使用了
最终源码:
8.3.3 为窗体加上防止机器人的验证机制 这个不弄了
page251
python manage.py runserver 192.168.99.218:8080
ch0831www.tar
https://download.csdn.net/download/wowocpp/11759320