Django笔记6(表单处理)

[b]1.搜索[/b]
[color=green](1) 在URLconf (mysite.urls )添加搜索视图。[/color]
(r’^search/$’,'mysite.books.views.search’)

[color=green](2) 在视图模块(mysite.books.views )中写这个 search 视图[/color]

from django.db.models import Q
from django.shortcuts import render_to_response
from books.models import Book

def search(request):
query = request.GET.get('q', '')
if query:
qset = (
Q(title__icontains=query) |
Q(authors__first_name__icontains=query) |
Q(authors__last_name__icontains=query)
)
results = Book.objects.filter(qset).distinct()
else:
results = []
return render_to_response("books/search.html", {
"results": results,
"query": query
})

[color=green](3)添加模板[/color]

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>Search{% if query %} Results{% endif %}</title>
</head>
<body>
<h1>Search</h1>
<form action="." method="GET">
<label for="q">Search: </label>
<input type="text" name="q" value="{{ query|escape }}"/>
<input type="submit" value="Search"/>
</form>

{% if query %}
<h2>Results for "{{ query|escape }}":</h2>

{% if results %}
<ul>
{% for book in results %}
<li>{{ book|escape }}
{% endfor %}
</li></ul>
{% else %}
<p>No books found</p>
{% endif %}
{% endif %}
</body>
</html>


[b]2.回馈表单[/b]
[color=green](1)添加URL (r’^contact/$’, ‘mysite.books.views.contact’)[/color]
[color=green](2)在books目录下建forms.py 文件[/color]

#!/usr/local/bin/python
# coding: utf-8

from django import forms

TOPIC_CHOICES = (
('general', 'General enquiry'),
('bug', 'Bug report'),
('suggestion', 'Suggestion'),
)

class ContactForm(forms.Form):
topic = forms.ChoiceField(choices=TOPIC_CHOICES)
message = forms.CharField()
sender = forms.EmailField(required=False)
#自定义验证
def clean_message(self):
message = self.cleaned_data.get('message', '')
num_words = len(message.split())
if num_words < 4:
raise forms.ValidationError("Not enough words!")
return message

此处需注意添加顶端两行,否则中文注释会出错
[color=green](3)添加视图函数[/color]

from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from forms import ContactForm
from django.core.mail import send_mail
def contact(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
topic = form.cleaned_data['topic']
message = form.cleaned_data['message']
sender = form.cleaned_data.get('sender', 'noreply@example.com')
send_mail(
'Feedback from your site, topic: %s' % topic,
message, sender,
['xuzhibin@mail.39.net']
)
return HttpResponseRedirect('/contact/thanks/')

else:
form = ContactForm()

return render_to_response('contact.html', {'form': form})

为使发email成功,需配置settings.py

EMAIL_HOST=127.0.0.1' #你的smtp 服务器ip 地址或名称
EMAIL_PORT=None #不处理就用Noe,否则指明port
EMAIL_HOST_USER='' #现在大部分邮箱都要求你输入 邮箱的全名
EMAIL_HOST_PASSWORD='' #你的口令
EMAIL_USE_TLS=None #不处理就用None

[color=green](4)添加模板[/color]

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>Contact us</title>

</head>
<body>
<h1>Contact us</h1>
<form action="." method="POST">
<div class="fieldWrapper">
{{ form.topic.errors }}
<label for="id_topic">Kind of feedback:</label>
{{ form.topic }}
</div>
<div class="fieldWrapper">
{{ form.message.errors }}
<label for="id_message">Your message:</label>
{{ form.message }}
</div>
<div class="fieldWrapper">
{{ form.sender.errors }}
<label for="id_sender">Your email (optional):</label>
{{ form.sender }}
</div>
<p><input type="submit" value="Submit"/></p>
</form>

</body>
</html>

[b]3. 从模型创建表单[/b]
[color=green](1)创建URL[/color]
(r'^add_publisher/$', 'mysite.books.views.add_publisher')
[color=green](2)在forms.py创建一个新Form[/color]

from django import forms
from models import *
class PublisherForm(forms.ModelForm):
class Meta:
model = Publisher

[color=green](3)创建视图函数[/color]

from forms import ContactForm,PublisherForm
def add_publisher(request):
if request.method == 'POST':
form = PublisherForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/add_publisher/thanks/')
else:
form = PublisherForm()
return render_to_response('books/add_publisher.html', {'form': form})

[color=green](4)创建模板文件[/color]

< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
<title>Add Publisher</title>
</head>
<body>
<h1>Add Publisher</h1>
<form action="." method="POST">
<table>
{{ form.as_table }}
</table>
<p><input type="submit" value="Submit"/></p>
</form>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值