37,719
社区成员
发帖
与我相关
我的任务
分享
class MsgPostForm(forms.Form):
receiver=forms.CharField(label='Send to:',
widget=forms.TextInput (attrs={'size':30, 'max_length':30}))
#实例化一个用于输入留言标题的文本框对象,
#并将该对象保存到title属性中。
title=forms.CharField(label='Title',
widget=forms.TextInput (attrs={'size':30, 'max_length':30}))
#实例化一个用于输入留言内容的文本框对象,
#并将该对象保存到content属性中。
#该文本框会转换为tinymce富文本编辑器的外观。
content=forms.CharField(label='Content',
widget=forms.Textarea(attrs={'size':10000}))
#该函数用于验证用户输入receiver username的合法性
def clean_receiver(self):
if 'username' in self.cleaned_data:
#从通过一般性验证的用户名输入到指定的receiver文本框中
#并保存到变量receiver中
receiver=self.cleaned_data['receiver']
if receiver==username:
return receiver
#如果该用户不存在,则引发一个ValidationError异常
raise forms.ValidationError('This user does not exist.')
class MsgPostForm(forms.Form):
receiver=forms.CharField(label='Send to:',max_length=30)
# receiver=forms.CharField(label='Send to:',
# widget=forms.TextInput (attrs={'size':30, 'max_length':30}))
#实例化一个用于输入留言标题的文本框对象,
#并将该对象保存到title属性中。
title=forms.CharField(label='Title',
widget=forms.TextInput (attrs={'size':30, 'max_length':30}))
#实例化一个用于输入留言内容的文本框对象,
#并将该对象保存到content属性中。
#该文本框会转换为tinymce富文本编辑器的外观。
content=forms.CharField(label='Content',
widget=forms.Textarea(attrs={'size':10000}))
#该函数用于验证用户输入receiver username的合法性
def clean_receiver(self):
if 'username' in self.cleaned_data:
receiver=self.cleaned_data['receiver']
try:
#从用户数据模型中取出username属性
#等于username变量值的用户对象
#如果在用户数据模型中不存在该用户对象
#则引发一个异常
User.objects.get(receiver!=username)
#异常处理
except ObjectDoesNotExist:
#返回username变量的值
return receiver
#如果用户两次输入的新密码不一致,则引发一个ValidationError异常
raise forms.ValidationError('This user does not exist.')
#导入get_object_or_404函数,
from django.shortcuts import get_object_or_404
def user_msg_list_page(request,username):
user=get_object_or_404(User,username=username)
return list_detail.object_list(
request,
queryset=user.msg_set.order_by('-id'),
paginate_by=ITEMS_PER_PAGE,
template_name='user_msg_list_page.html',
template_object_name='msg',
extra_context={'username':username}
)
queryset=get_object_or_404(msg_set,touser=user).order_by('-id')
#touser是外键收件人
@login_required
def msg_post_page(request):
if request.method=='POST':
form=MsgPostForm(request.POST)
if form.is_valid():
newmessage=Msg(title=form.cleaned_data['title'],
receiver = form.cleaned_data['receiver'],
content=form.cleaned_data['content'],
user=request.user,
ip=request.META['REMOTE_ADDR']
)
newmessage.save()
return HttpResponseRedirect('/')
else:
variables=RequestContext(request,{'form':form})
return render_to_response('msg_post_page.html',variables)
else:
form=MsgPostForm()
variables=RequestContext(request,{'form':form})
return render_to_response('msg_post_page.html',variables)
def clean_receiver(self):
pprint.pprint(self.cleaned_data) # print self.cleaned_data
try:
User.objects.get(username = self.cleaned_data['receiver'])
return self.cleaned_data['receiver']
except User.DoesNotExist:
#return "UNKNOWN USER"
# if there is no such user, set self.cleaned_data['receiver'] to
# "UNKNOWN USER"
# or you can raised an exception error without returning "UNKNOWN USER"
# so that it wont be saved
raise forms.ValidationError('This user does not exist.')
#该函数用于验证用户输入receiver username的合法性
def clean_receiver(self):
#if 'username' in self.cleaned_data: #------这里错了---------
if 'receiver' in self.cleaned_data:
receiver=self.cleaned_data['receiver']
try:
#从用户数据模型中取出username属性
#等于username变量值的用户对象
#如果在用户数据模型中不存在该用户对象
#则引发一个异常
User.objects.get(receiver!=username)
#异常处理
except ObjectDoesNotExist:
#返回username变量的值
return receiver
#如果用户两次输入的新密码不一致,则引发一个ValidationError异常
raise forms.ValidationError('This user does not exist.')
...
@login_required #decorator is above def msg_post_page
def msg_post_page(request):
if request.method=='POST':
form=MsgPostForm(request.POST)
if form.is_valid():
newmessage=Msg(title=form.cleaned_data['title'],
receiver = form.cleaned_data['receiver'],
content=form.cleaned_data['content'],
user=request.user,
ip=request.META['REMOTE_ADDR']
)
newmessage.save()
#
#else:
# you may need to handle the EXCEPTION here if the form is not valid,
# if Exception is raised from forms.ValidationError
return HttpResponseRedirect('/')
...
import pprint
class MsgPostForm(forms.Form):
receiver=forms.CharField(label='Send to:',max_length=30)
title=forms.CharField(label='Title',
widget=forms.TextInput (attrs={'size':30, 'max_length':30}))
content=forms.CharField(label='Content',
widget=forms.Textarea(attrs={'size':10000}))
def clean_receiver(self):
pprint.pprint(self.cleaned_data) # print self.cleaned_data
try:
User.objects.get(username = self.cleaned_data['receiver'])
return self.cleaned_data['receiver']
except User.DoesNotExist:
return "UNKNOWN USER"
# if there is no such user, set self.cleaned_data['receiver'] to
# "UNKNOWN USER"
# or you can raised an exception error without returning "UNKNOWN USER"
# so that it wont be saved
#raise forms.ValidationError('This user does not exist.')
raise forms.ValidationError('This user does not exist.')
def clean(self):
pprint.pprint(self.cleaned_data)
if 'username' in self.cleaned_data and 'receiver' in self.cleaned_data:
if self.cleaned_data['username'] == self.cleaned_data['receiver']:
raise forms.ValidationError('user = receiver ')
return self.cleaned_data
<tr align="center">
<th>Title</th><th>Sender</th>
<th>Date</th><th>Hits</th><th>Send to</th>
</tr>
<! --If the value of msg_list is NOT-NULL-->
{% if msg_list %}
<! --Load comments of Django-->
{% load comments %}
<! --From the message list saved in msg_list,use for loop and save into msg variable-->
{% for msg in msg_list %}
<tr align="center">
<td align="left">
<! --{{msg.id}}is used for saving the value of id-->
<a href="/detail/{{msg.id}}/">
<! --Retrieve the title-->
{{msg.title}}
</a>
</td>
<! --{{msg.user.username}}is used for retrieving the sender's name-->
<td><a href="/user/{{msg.user.username}}/">{{msg.user.username}}</a></td>
<! --Retrieve the submition time,and format it-->
<td>{{msg.datetime|date:"Y-m-d"}}</td>
<! --Retrieve the number of click-->
<td>{{msg.clickcount}}</td>
<! --{{msg.receiver}}is used for retrieving the receiver's name-->
<td><a href="/user/{{msg.receiver}}/">{{msg.receiver}}</a></td>
</td>
</tr>
{% endfor %}
{% else %}
<tr align="center"><td colspan="8">No message!
</td></tr>
{% endif %}
<! --This file will be saved by utf8-->
<! --此模板从基础模板base.html继承-->
{% extends "base.html"%}
<! --对基础模板中的block title,endblock部分进行修改-->
{% block title %}Message List{% endblock %}
<! --对基础模板中的block content,endblock部分进行修改-->
{% block content %}
<table class="msglist">
<caption><h2>Primesoft Message Board</h2></caption>
<! --JIANG msg_list.html MOBAN BAOHAN DAO BEN MOBAN ZHONG-->
{% include "msg_list.html" %}
</table>
<! --JIANG paginator.html MOBAN BAOHAN DAO BEN MOBAN ZHONG-->
{% include "paginator.html" %}
{% endblock %}
<! --This file will be saved by utf8-->
{% extends "base.html" %}
{% block title %}User Registration{% endblock %}
<! --对基础模板中的block head,endblock部分进行修改-->
{% block head %}User Registration{% endblock %}
{% block content %}
<! --action 属性指定由 register_page 函数负责处理该表单用post 方法提交的数据-->
<form method="post" action=".">{% csrf_token %}
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<! --利用从register_page 函数传递过来的注册表单对象form 生成描述注册表单包含的各个表单元素的 html代码-->
{{form.as_p}}
<input type="submit" value="Register">
</form>
{% endblock %}
{% extends "base.html" %}
{% block title %}Post Message{% endblock %}
{% block head %}Post Message{% endblock %}
{% block content %}
<form method="post" action=".">{% csrf_token %}
<! --利用从 msg_post_page 函数传递过来的留言表单对象form 生成描述发表留言表单包含的各个表单元素的 html代码-->
{{form.as_p}}
<input type="submit" value="Submit">
</form>
{% endblock %}
{% extends "base.html" %}
{% load comments %}
{% block title %}Message content and comments{% endblock %}
{% block head %}Message content and comments{% endblock %}
{% block content %}
<table class="msglist">
<tr align="left">
<th>Sender:{{msg.user.username}}</th>
<th>Send to:{{msg.receiver}}</th>
<th>Date:{{msg.datetime|date:"Y-m-d"}}</th>
</tr>
<tr>
<td colspan="4"><b>{{msg.title}}</b></td>
</tr>
<tr>
<! --Retrieve the detail of message-->
<td colspan="4">{{msg.content}}</td>
</tr>
</table>
{% endblock %}
{% extends "base.html"%}
{% load comments %}
<! -- -username- 用于去除从object_list函数传递过来的username模板变量的值-->
{% block title %}{{username}}'s Message List{% endblock %}
{% block content %}
<table class="msglist">
<caption><h2>{{username}}'s Message List</h2></caption>
{% include "msg_list.html" %}
</table>
{% include "paginator.html" %}
{% endblock %}
<! --This file will be saved by utf8-->
<html>
<head>
<title>Primesoft Message Board|{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="/site_media/style.css" type="text/css">
<! --Install tinymce-->
<script type="text/javascript" src="/site_media/tiny_mce.js"></script>
<! --Initial tinymce -->
<script type="text/javascript">
tinyMCE.init({
mode:"textareas",
theme:"advanced",
<! --Define using the emotions plugin of tinymce-->
plugins:"emotions",
<! --Define tinymce buttons-->
theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,fontselect,fontsizeselect",
theme_advanced_buttons2:"cut,copy,paste,|,undo,redo,|,forecolor,backcolor,|,emotions",
theme_advanced_buttons3:"",
<! --Define timynce location-->
theme_advanced_toolbar_location:"top",
<! --Define tinymce align-->
theme_advanced_toolbar_align:"left",
<! --Define timymce language-->
language:"En"
});
</script>
</head>
<body>
<! --html marked by div discribes the navigation bar-->
<div class="nav">
<a href="/">Homepage|</a>
<a href="/post/">Post Message|</a>
{% if user.is_authenticated %}
<a href="/user/{{ser.username}}/">
{{user.username}}|</a>
<a href="/accounts/password/change/">Change Password|</a>
<a href="/accounts/logout/">Logout|</a>
{% else %}
<a href="/accounts/login/?next=/">Login|</a>
<a href="/accounts/register/">Register|</a>
{% endif %}
<a href="/admin/">Admin</a>
</div>
<h4>{% block head %}{% endblock %}</h4>
{% block content %}{% endblock %}
</body>
</html>