功能:在A网页提交一个评论Forms_B,提交之后自动刷新页面,能够显示刚刚的画面
思路:利用一个已经创建的表单,通过视图让其在网页中表现出来,填写玩信息之后提交,会提交到一个新的视图里面去做接受,接受之后重定向到另外一个地方。(是什么地方)
步骤:

一、在app里面的forms.py里面新建一个表单:

 1 #blog/forms.py
 2 from django import forms
 3
 4 class CommentForm(forms.Form):
 5     '''
 6     评论表单
 7     '''
 8     #author使用CharField字段,字段内使用三个参数,分别是widget, max_length, error_messages
 9     author = forms.CharField(
10         #为各个需要渲染的字段指定渲染成什么Html组件,主要是为了添加css样式
11         widget=forms.TextInput(attrs={"id": "author", "class": "comment_input",
12                                                        "required": "required","size": "25", "tabindex": "1"}),
13                           max_length=50,error_messages={"required":"username不能为空",})
14     email = forms.EmailField(widget=forms.TextInput(attrs={"id":"email","type":"email","class": "comment_input",
15                                                        "required":"required","size":"25", "tabindex":"2"}),
16                              max_length=50, error_messages={"required":"email不能为空",})
17     url = forms.URLField(widget=forms.TextInput(attrs={"id":"url","type":"url","class": "comment_input",
18                                                    "size":"25", "tabindex":"3"}),
19                           max_length=100, required=False)
20     comment = forms.CharField(widget=forms.Textarea(attrs={"id":"comment","class": "message_input",
21                                                        "required": "required", "cols": "25",
22                                                        "rows": "5", "tabindex": "4"}),
23                                                 error_messages={"required":"评论不能为空",})
24     article = forms.CharField(widget=forms.HiddenInput())

二、在文章详情视图里面让接入表单

1 def article(request):
2     # 评论表单
3     comment_form = CommentForm({'author': request.user.username,
4                         'email': request.user.email,
5                         'url': request.user.url,
6                         'article': id} if request.user.is_authenticated() else{'article': id})
7     return render(request, 'article.html', locals())

三、在模板中将视图体现出来

 1     <form action="{% url 'comment_post' %}" method="post">
 2     {% csrf_token %}
 3     <p>{{ comment_form.author }}
 4     <label for="author">Name (required)</label></p>
 5
 6     <p>{{ comment_form.email }}
 7     <label for="email">Email (Will NOT be published) (required)</label></p>
 8
 9     <p>{{ comment_form.url }}
10     <label for="url">URL</label></p>
11
12     <p>{{ comment_form.comment }}</p>
13
14     <p>
15         {{ comment_form.article }}
16         <input name="submit" type="submit" id="submit" tabindex="5" value="Submit" class="button" />
17     </p>
18     </form>

四、模板中的提交链接到URL中

url(r'^comment/post/$', comment_post, name='comment_post'),

五、在视图中接收提交的内容,并且重定向

 1 # 提交评论
 2 def comment_post(request):
 3     try:
 4         #获取表单内填入的内容
 5         comment_form=CommentForm(request.POST)
 6         #进行验证的第一个表单验证
 7         if comment_form.is_vaild():
 8             #获取表单信息
 9             #cleaned_data()用来把接收到的文字清洗为符合django的字符
10             #create是一个在一步操作中同时创建对象并且保存的便捷方法。
11             comment=Comment.objects.create(username=comment_form.cleaned_data["author"],
12                 eamil=comment_form.cleaned_data["email"],
13                 url=comment_form.cleaned_data["url"],
14                 content=comment_form.cleaned_data["comment"],
15                 article_id=comment_form.cleaned_data["article"],
16                 #如果用户已经登录,则获取已经登录的用户,非登录用户将返回None
17                 #此处用的if语句有些特殊。
18                 user=request.user if request.user.is_authenticated() else None)
19             comment.save()  #保存实例
20         else:
21             return render(request, "failure.html", {"reason":comment_form.erros})
22     except Exception as e:
23         logger.error(e)
24         #重定向到进来之前的网页
25         #HTTP_REFERER是http的头文件的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此获得一些信息用于处理。
26     return redirect(request.META['HTTP_REFERER'])

'''
#判断用户是不是登录,也可以用这个写法,79行的写法也很简单
if request.user.is_authenticated():  #判断用户是否登录user=request.user            #获取已经登录的用户
else:user=request.user            #非登录用户将返回AnonymousUser
'''

request.META是一个里面包含了所有本次http请求的Header信息,比如用户IP,用户Agent
常见的键值有:
HTTP_REFERER,进站前链接网页,如果有的话。
redirec是重定向
redirec是重定向

转载于:https://www.cnblogs.com/cenyu/p/5718181.html

Django博客功能实现—文章评论功能相关推荐

  1. Hexo + yilia 主题 +githubpages博客添加友言评论功能

    前言 Hexo博客的Yilia主题中评论系统只提供了畅言.网易云跟帖.多说和Disqus. 由于多说评论.网易云跟帖已经关闭系统,畅言需要域名备案,而github是国外的,没有备案,所以尝试了其他第三 ...

  2. Django博客系统(首页文章数据展示)

    1. 查询分页数据并展示 1.查询分类文章数据并通过context传递给HTML from home.models import ArticleCategory,Article from django ...

  3. Django博客系统(推荐文章数据展示)

    1. 添加文章浏览量数据 1.每次请求文章详情时给浏览量+1 try:article=Article.objects.get(id=id) except Article.DoesNotExist:re ...

  4. Django博客系统(文章模型)

    1. 定义模型类 在home子应用的models.py模型中定义文章模型 from users.models import User class Article(models.Model):" ...

  5. Django博客系统(文章分类模型)

    文章分类后台管理 网站的管理员负责查看.添加.修改.删除数据 Django能够根据定义的模型类自动地生成管理模块 登陆站点:http://127.0.0.1:8000/admin 需要服务器是启动状态 ...

  6. Django博客搭建-新闻模块6-新闻搜索功能(Django+Haystack+elasticsearch)

    Blog项目--新闻模块 文章目录 Blog项目--新闻模块 一.需求分析 二.搜索引擎原理 三.Elasticsearch 特点 四.使用docker安装elasticsearch 五.后端代码实现 ...

  7. 文章详情页文章评论功能

    文章详情页文章评论功能 一.文章评论功能实现流程 文章评论包含两种评论,根评论:对文章的评论:子评论:对评论的评论.两者的区别在于是否存在父评论. 实现流程:1.构建样式:2.提交根评论:3.显示根评 ...

  8. django博客项目8:文章详情页

    首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容.现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样 ...

  9. Django 博客开发教程 8 - 博客文章详情页

    首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容.现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样 ...

最新文章

  1. 简明Python3教程 4.安装
  2. Linux tomcat日志分割按天分割
  3. 客户关系管理系统部分代码实现
  4. 吴恩达机器学习笔记——第一章
  5. ningbooj--1655--木块拼接(贪心)
  6. pb string最大长度_跑马备赛训练计划大盘点,助你跑出PB
  7. .NET 6新特性试用 | 无需配置开发人员异常页
  8. 网页特效java代码,美化网页常用特效代码
  9. python文件编码转换工具_python实现unicode转中文及转换默认编码的方法
  10. mysql远程访问授权命令_mysql远程访问授权
  11. ENGINE_API CXNoTouch
  12. 十二月份找工作好找吗_人民大学在职研究生将来好找工作吗?
  13. destoon短信接口更换成和其他运营商通道并存
  14. 核方法以及核函数讲解
  15. 解决win10开启移动热点共享手机连上后无法上网的问题
  16. 瑞幸自曝虚假交易22亿,App却反冲 TOP 1
  17. Android入门学习
  18. vmvare虚拟机无法读取ntfs的U盘解决方法,以及更换镜像下载源
  19. SQL Server数据库-表
  20. 使用element-ui使用表格展示微信头像

热门文章

  1. autosys虚拟机定义
  2. let finger cross
  3. Roundcube Webmail信息泄露漏洞(CVE-2015-5383)
  4. Hibernate入门(二)
  5. 初入前端,面对一个项目应注意哪些?
  6. 2015结束,2016开始
  7. 订餐系统之自动确认淘点点订单
  8. step1 . day10 C语言基础练习之指针和函数
  9. JavaScript高级篇之Function对象
  10. 算法竞赛进阶指南第一章--题解