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

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

 #blog/forms.py
from django import forms class CommentForm(forms.Form):
'''
评论表单
'''
#author使用CharField字段,字段内使用三个参数,分别是widget, max_length, error_messages
author = forms.CharField(
#为各个需要渲染的字段指定渲染成什么Html组件,主要是为了添加css样式
widget=forms.TextInput(attrs={"id": "author", "class": "comment_input",
"required": "required","size": "", "tabindex": ""}),
max_length=50,error_messages={"required":"username不能为空",})
email = forms.EmailField(widget=forms.TextInput(attrs={"id":"email","type":"email","class": "comment_input",
"required":"required","size":"", "tabindex":""}),
max_length=50, error_messages={"required":"email不能为空",})
url = forms.URLField(widget=forms.TextInput(attrs={"id":"url","type":"url","class": "comment_input",
"size":"", "tabindex":""}),
max_length=100, required=False)
comment = forms.CharField(widget=forms.Textarea(attrs={"id":"comment","class": "message_input",
"required": "required", "cols": "",
"rows": "", "tabindex": ""}),
error_messages={"required":"评论不能为空",})
article = forms.CharField(widget=forms.HiddenInput())

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

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

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

     <form action="{% url 'comment_post' %}" method="post">
{% csrf_token %}
<p>{{ comment_form.author }}
<label for="author">Name (required)</label></p> <p>{{ comment_form.email }}
<label for="email">Email (Will NOT be published) (required)</label></p> <p>{{ comment_form.url }}
<label for="url">URL</label></p> <p>{{ comment_form.comment }}</p> <p>
{{ comment_form.article }}
<input name="submit" type="submit" id="submit" tabindex="5" value="Submit" class="button" />
</p>
</form>

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

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

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

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

Django博客功能实现—文章评论功能的更多相关文章

  1. 为hexo博客添加基于gitment评论功能

    关于gitment gitment其实就是利用你的代码仓库的Issues,来实现评论.每一篇文章对应该代码仓库中的 一个Issues,Issues中的评论对应你的博客每篇文章中的评论.如果你是用git ...

  2. Django 博客单元测试:测试评论应用

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 评论应用的测试和博客应用测试的套路是一样的. 先来建立测试文件的目录结构.首先在 c ...

  3. Django(博客系统):文章内容使用django-ckeditor、文章简介使用django-tinymce

    文章内容使用django-ckeditor 1)安装django-ckeditor pip install django-ckeditorpip install Pillow 2)在settings. ...

  4. Django1.9开发博客(7)- 实现功能

    到目前为止我们已经完成了一个django应用的所有基础部分. 包括url配置.视图.模型和模板.接下来开始继续完善我们的博客系统了. 首先我们需要一个显示每篇文章的详细页面,对不? 文章详情 对于首页 ...

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

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

  6. 为你的CSDN博客添加CNZZ流量统计功能

    一.流量统计介绍 流量统计是指通过各种科学的方式,准确的纪录来访某一页面的访问者的流量信息,目前而言,必须具备可以统计. 1.简介 统计独立的访问者数量(独立用户.独立访客): 可以统计独立的IP地址 ...

  7. django博客项目6:Django Admin 后台发布文章

    在此之前我们完成了 Django 博客首页视图的编写,我们希望首页展示发布的博客文章列表,但是它却抱怨:暂时还没有发布的文章!如它所言,我们确实还没有发布任何文章,本节我们将使用 Django 自带的 ...

  8. Django博客开发实践,初学者开发经验

    python,Django初学者,开发简易博客,做了一下笔记,记录了开发的过程,功力浅薄,仅供初学者互相 交流,欢迎意见建议.具体链接:Django博客开发实践(一)--分析需求并创建项目 地址:ht ...

  9. django博客项目5:博客首页视图(2)

    真正的 Django 博客首页视图 在此之前我们已经编写了 Blog 的首页视图,并且配置了 URL 和模板,让 Django 能够正确地处理 HTTP 请求并返回合适的 HTTP 响应.不过我们仅仅 ...

随机推荐

  1. MySQL 5.7 create VIEW or FUNCTION or PROCEDURE

    1.视图 a. CREATE ALGORITHM = UNDEFINED DEFINER = `root`@`localhost` SQL SECURITY INVOKER VIEW `sakila` ...

  2. Java--自定义Class并且在内存中编译,加载,实例化

    本文的目的: 使用者在程序运行期间,可以动态的写Java Class,不需要生成任何.Class文件就可以完全在内存中编译,加载,实例化. 1.需要用到的组件介绍 1)JavaCompiler:用于编 ...

  3. UnitOfWork以及其在ABP中的应用

    Unit Of Work(UoW)模式在企业应用架构中被广泛使用,它能够将Domain Model中对象状态的变化收集起来,并在适当的时候在同一数据库连接和事务处理上下文中一次性将对象的变更提交到数据 ...

  4. Lind.DDD.Repositories.Redis层介绍

    回到目录 之前已经发生了 大叔之前介绍过关于redis的文章,有缓存,队列,分布式pub/sub,数据集缓存以及仓储redis的实现等等,而今天在Lind.DDD的持久化组件里,redis当然也有一席 ...

  5. 细说进程五种状态的生老病死——双胞胎兄弟Java线程

    java线程的五种状态其实要真正高清,只需要明白计算机操作系统中进程的知识,原理都是相同的. 系统根据PCB结构中的状态值控制进程. 单CPU系统中,任一时刻处于执行状态的进程只有一个. 进程的五种状 ...

  6. MSSQL 分页

    使用数据库分页返回用户数据有如下好处:1.减少服务器磁盘系统地读取压力2.减少网络流量,减轻网络压力3.减轻客户端显示数据的压力4.提高处理效率. 一般而言分页处理分为两种:应用程序中的分页(查询出所 ...

  7. IE9 IE8 ajax跨域问题的解决

    项目中用到的跨域 ,在除IE9以下的浏览器上运行都是没有问题的,IE8 IE9中报错,error :no transport; 网上解决办法均是 在发起请求之前添加 jQuery.support.co ...

  8. 关于UIScollView 中的contentOffset 的理解

    大家对UIScollView 中的contentOffset 一直有疑问, 虽然看是一个简单的问题, 实际上并不简单. 当时我也有好多疑问, 后来在网上找了一下资料, 发现没有找到合理的解释, 因此自 ...

  9. LoadRunner 11 安装步骤

    loadrunner 安装步骤: LoadRunner11下载:  在网上可以搜索到,在这个就不提供了. LoadRunner11原理: 破解方法和以前版本相同,我用的是LR8.0的破解文件,同样实用 ...

  10. TNS-12502: TNS:listener received no CONNECT_DATA from client

    检查我们的一台ORACLE数据库的监听日志发现有不少TNS-12502错误信息.如下所示 TNS-12502: TNS:listener received no CONNECT_DATA from c ...