这一篇教程,我们通过Django2的Session,让个人博客系统中用户的昵称和邮箱能够根据以往的输入内容自动填入,并且当评论失败时也能够保留评论内容。
我们需要完成的功能如下:
- 用户提交评论时,需要将填入的昵称和邮箱存入session。
- 用户提交评论成功时,session中存储的评论内容为空,否则将未成功提交的评论内容存入session。
- 请求页面时,需要将session中的内容添加到传送至模板的数据中。
- 页面加载时,获取视图中传来的session数据,分别写入不同表单元素的值。
我们就按上述顺序完成个个功能的添加。
1、在提交评论的视图函数中添加新的代码,向session中存储数据。
示例代码:
def pub_comment(request): if request.method == 'POST': request.session['name'] = request.POST.get('name') # 将请求中的昵称存入session request.session['email'] = request.POST.get('email') # 将请求中的邮箱存入session ...省略部分代码... if form.is_valid(): try: ...省略部分代码... request.session['content'] = '' # 发布成功时session中存储的内容数据为空值 except: ...省略部分代码... request.session['content'] = request.POST.get('content') # 发布失败时将请求中的内容存入session else: ...省略部分代码...
以上代码中,标注为红色的代码为新增内容。
2、在页面详情视图中获取session的内容并存入传送给模板的数据中。
示例代码:
class ArticleDetail(DetailView): ...省略部分代码... def get_context_data(self, **kwargs): ...省略部分代码... try: context['session'] = { 'name': self.request.session['name'], 'email': self.request.session['email'], 'content': self.request.session['content'] } # 将session数据存入传送到模板的数据中 except: # session读取异常时不做处理 pass ...省略部分代码...
以上代码中,标注为红色的代码为新增内容。
3、在文章详情的模板中添加一个函数,负责页面载入时为指定的表单元素赋值。
示例代码:
{% block content %} <script> function reply(comment_name, comment_id) { ...省略部分代码... } function onload() { $('#name').val('{{ session.name }}'); // 设置昵称为session中的昵称 $('#email').val('{{ session.email }}'); // 设置邮箱为session中的邮箱 $('#content').val('{{ session.content }}') // 设置内容为session中的内容 } </script> ...省略部分代码... {% endblock %}
以上代码中,标注为红色的代码为新增内容。
4、在页面载入时需要执行“onload()”函数,这个触发我们需要房子基本模板“base.html”的“<body>”标签中。
示例代码:
<body onload="onload()">
以上代码中,标注为红色的代码为新增内容。
到这里我们就实现了想要的功能。
那么,使用Django2开发个人博客系统的教程到这里也就结束了。
感谢大家对魔力Python教程的支持!
这个项目并不尽善尽美,只是通过这个项目帮助大家对之前学习的常用知识内容进行串联,熟悉Django常用功能的使用方法。
对于这个项目,我们还能够进行更多的优化。
例如:
- 自定义后台模块,为用户添加权限,不同用户具备不同的后台功能;
- 添加支持第三方登录的功能;
- 添加根据文章标签筛选的功能;
- 添加前一篇和后一篇文章的快捷链接;
- 限制用户登录之后才能够发布评论;
- 解决其它更多的需求。
这里的教程只是抛砖引玉,希望大家更够做出具有更加丰富功能的博客系统。
只有更多的练习与实战,才能够将所学知识融会贯通,早日成为Django2的高手。
项目源代码下载:【点此下载】
转载请注明:魔力Python » Django2练习项目:开发个人博客系统(11)