(五)Django2——表单

25 篇文章 0 订阅
13 篇文章 0 订阅

截下来通过新增评论功能,尝试表单的提交

html代码如下

<form action="{% url 'saveComment' %}" method="post" name="saypl" id="saypl" 
      onsubmit="return CheckPl(document.saypl)">
   <div id="plpost">
      <p class="saying"></span>来说两句吧...</p>
      <input type="hidden" name="art_id" value="{{article.id}}">
      <textarea name="comment" rows="6" id="saytext"></textarea>
      <input name="imageField" type="submit" value="提交">
    </div>
</form>

模型

#评论
class Comment(models.Model):
    art= models.ForeignKey(Articles,on_delete=models.CASCADE)#文章ID
    comment = models.CharField(max_length = 200,null = False)
    com_date = models.DateField(auto_now_add=True)#发表日期

views.py

from django.shortcuts import render,get_object_or_404
from django.http import Http404, HttpResponseRedirect
from .models import *
from django.urls import reverse

# 保存评论
def saveComment(request):
    article = get_object_or_404(Articles,id =request.POST['art_id'])
    com = Comment()
    com.comment =  request.POST['comment']
    com.art = article
    com.save()
    return HttpResponseRedirect(reverse('articleInfo', args=(request.POST['art_id'])))

url

   path('article/comment/', views.saveComment , name ='saveComment')

讲解

由于我们创建一个 POST 表单(它具有修改数据的作用),所以我们需要小心跨站点请求伪造。 谢天谢地,你不必太过担心,因为 Django 已经拥有一个用来防御它的非常容易使用的系统。 简而言之,所有针对内部 URL 的 POST 表单都应该使用 {%csrf_token %}模板标签。在这里我们先不理会这个,先禁用这个功能,修改setting.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

request.POST 是一个类字典对象,让你可以通过关键字的名字获取提交的数据。 这个例子中, request.POST['art_id']以字符串形式返回选择的art_id。request.POST的值永远是字符串。

注意,Django 还以同样的方式提供 request.GET用于访问 GET 数据 —— 但我们在代码中显式地使用 request.POST ,以保证数据只能通过 POST 调用改动。

代码返回一个 HttpResponseRedirect 而不是常用的 HttpResponse 、HttpResponseRedirect 只接收一个参数:用户将要被重定向的 URL(请继续看下去,我们将会解释如何构造这个例子中的 URL)。

在这个例子中,我们在HttpResponseRedirect  的构造函数中使用 reverse() 函数。这个函数避免了我们在视图函数中硬编码 URL。它需要我们给出我们想要跳转的视图的名字和该视图所对应的 URL 模式中需要给该视图提供的参数。 在本例中,使用之前设定的 URLconf, reverse() 调用将返回一个这样的字符串:

article/info/<int:article_id>/
reverse('articleInfo', args=(request.POST['art_id']))

其中articleInfo对应url中的name,args将会替代<int:article_id>

项目地址(码云):传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值