【笔记】Python新手使用的Django架站的16堂课 — 第八章(四)

模型窗体类ModelForm的应用

urls.py

from django.conf.urls import url
from django.contrib import admin
from testdb import views

urlpatterns = [
    url(r'^$',views.index),
    url(r'^alert/$',views.alert),
    url(r'^admin/', admin.site.urls),
    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),

forms.py

# -*- coding: utf-8 -*-
from django import forms
from testdb import models

class ContactForm(forms.Form):
	CITY = [['TP','TaiPei'],['TY','TaoYuang'],['TC','TaiChuang'],['TN','TaiNan'],['KS','Kaohsiung'],['NA','Others'],]
	user_name = forms.CharField(label="您的姓名",max_length=50,initial='无名')
	user_city = forms.ChoiceField(label='居住城市',choices=CITY)
	user_school = forms.BooleanField(label='是否在学',required=False)
	user_email = forms.EmailField(label='电子邮件')
	user_message = forms.CharField(label='你的意见',widget=forms.Textarea)
	
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 = '设置密码'

views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render

from django.template.loader import get_template
from django.http import HttpResponse,HttpResponseRedirect
from testdb import models,forms
from django.template import RequestContext,Context,Template

from django.core.mail import send_mail,send_mass_mail,EmailMultiAlternatives
from django.conf import settings
# Create your views here.
def posting(request):
	template = get_template('posting.html')
	moods = models.Mood.objects.all()
	message = '如果要发布信息,那么每个字段都要填写...'
#	request_context = RequestContext(request)
#	request_context.push(locals())
#	#html = template.render(request_context)
	html = template.render(context=locals(),request=request)
#	html = template.render(locals())
	return HttpResponse(html)
	
def index(request,pid=None,del_pass=None):
	template = get_template('index.html')
	posts = models.Post.objects.filter(enabled=True).order_by('-pub_time')[0:30]
	moods = models.Mood.objects.all()
	try:
		user_id=request.GET['user_id']
		user_pass=request.GET['user_pass']
		user_post=request.GET['user_post']
		user_mood=request.GET['mood']
	except:
		user_id=None
		message='如果要发布信息,那么每个字段都要填写...'
		
	if del_pass and pid:
		try:
			post = models.Post.objects.get(id=pid)
		except:
			post = None
		if post:
			if post.del_pass == del_pass:
				post.delete()
				message = '数据删除成功'
			else:
				message = '密码错误'
				
	elif user_id != None and user_id != '':
		mood=models.Mood.objects.get(status=user_mood)
		post = models.Post.objects.create(mood=mood,nickname=user_id,del_pass=user_pass,message=user_post)
		post.save()
		message='成功存储!请记得你的编辑密码[{}]!,信息须经审核后才会显示。'.format(user_pass)
	else:
		message='如果要发布信息,那么每个字段都要填写...'
	html = template.render(locals())
	
	return HttpResponse(html)
	
def alert(request):
	template = get_template('alert.html')
	html = template.render()
	return HttpResponse(html)
	
def listing(request):
	template = get_template('listing.html')
	posts = models.Post.objects.filter(enabled=True).order_by('-pub_time')[0:50]
	moods = models.Mood.objects.all()
	html = template.render(locals())
	
	return HttpResponse(html)
	
def contact(request):
	if request.method =='POST':
		form = forms.ContactForm(request.POST)
		if form.is_valid():
			message = '感谢您的来信,我们会尽快处理您的宝贵意见。'
			user_name = form.cleaned_data['user_name']
			user_city = form.cleaned_data['user_city']
			user_school = form.cleaned_data['user_school']
			user_email = form.cleaned_data['user_email']
			user_message = form.cleaned_data['user_message']
			
			email_subject = u'来自【不吐不快】网站的网友意见'
			email_body = u'''
			网友姓名:{}
			居住城市:{}
			是否在学:{}
			反映意见:如下
			{}'''.format(user_name,user_city,user_school,user_message)
			#email_from = 'xxxx@163.com'
			email_from = settings.EMAIL_HOST_USER
			email_to = ['xxxxx@qq.com',]
			res = send_mail(email_subject,email_body,email_from,email_to,fail_silently=False)
			if res == 1:
				message = '邮件发送成功!'
			else:
				message = '邮件发送失败'
		else:
			message = '请检查您输入的信息是否正确!'
	else:
		form = forms.ContactForm()
	template = get_template('contact.html')
	request_context = RequestContext(request)
	request_context.push(locals())
	#html = template.render(request_context)
	html = template.render(context=locals(),request=request)
	return HttpResponse(html)

def post2db(request):
	message_flag = False
	if request.method == 'POST':
		post_form = forms.PostForm(request.POST)
		if post_form.is_valid():
			message = '您的信息已存储,要等管理员启用后才能看到。'
			message_flag =True
			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(context=locals(),request=request)
	return HttpResponse(html)

post2db.html

<!-- post2db.html(ch08www project) -->
{% extends 'base.html' %}
{% block title %}我有话要说{% endblock %}
{% block content %}

{% if message %}
	{% if message_flag %}
	<div class='alert alert-success'>
	{% else %}
	<div class='alert alert-warning'>
	{% endif %}
	{{message}}</div>
{% endif %}
<div class='container'>
<form name='my form' action='.' method='POST'>
	{% csrf_token %}
	<table>
		{{post_form.as_table}}
	</table>
	<br/>
	<input type='submit' value='发布'>
	<input type='reset' value='清除重填'>
</form>
</div>
{% endblock %}

header.html

<!-- header.html(ch08www project) -->
<nav class='navbar navbar-default'>
	<div class='container-fluid'>
		<div class='navbar-header'>
			<div class='navbar-brand' align=center>
				不吐不快
			</div>
		</div>
		<ul class='nav navbar-nav'>
			<li class='active'><a href='/'>Home</a></li>
			<li><a href='/list'>浏览信息</a></li>
			<li><a href = '/post'>发布信息</a></li>
			<li><a href = '/post2db'>发布信息(ModelForm)</a></li>
			<li><a href='/contact'>联系管理员</a></li>
			<li><a href='/admin'>后台管理</a></li>
			
		</ul>
	</div>
</nav>

实测效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值