新建forms.py文件

  1. from django import forms # 引入表单类
  2. from .models import ArticlePost # 引入文章模型
  3. # 文章的表单类
  4. class ArticlePostForm(forms.ModelForm):
  5. class Meta:
  6. model = ArticlePost # 指明数据模型来源
  7. fields = ('title', 'body') # 定义表单包含的字段

修改视图类

当视图函数接收到一个客户端的request请求时,首先根据request.method判断用户是要提交数据(POST)、还是要获取数据(GET):

  • 如果用户是提交数据,将POST给服务器的表单数据赋于article_post_form实例。然后使用Django内置的方法.is_valid()判断提交的数据是否满足模型的要求。
  • 如果满足要求,保存表单中的数据(但是commit=False暂时不提交到数据库,因为author还未指定),并指定author为id=1的管理员用户。然后提交到数据库,并通过redirect返回文章列表。redirect可通过url地址的名字,反向解析到对应的url。
  • 如果不满足要求,则返回一个字符串”表单内容有误,请重新填写。”,告诉用户出现了什么问题。
  • 如果用户是获取数据,则返回一个空的表单类对象,提供给用户填写

    1. def article_create(request):
    2. """写文章视图"""
    3. if request.method == 'POST':
    4. article_post_form = ArticlePostForm(data=request.POST) # 将提交的数据复制到表单示例
    5. if article_post_form.is_valid():
    6. new_article = article_post_form.save(commit=False) # 验证提交数据满足模型,保存,但不存到数据库
    7. new_article.author = User.objects.get(id=1) # 创建并传入用户id
    8. new_article.save() # 提交到数据库
    9. return redirect('article:article_list') # 完成后返回文章列表
    10. else:
    11. return HttpResponse("表单数据有误,请重新填写。")
    12. else:
    13. # 用户请求获取数据
    14. article_post_form = ArticlePostForm()
    15. context = {'article_post_form': article_post_form}
    16. return render(request, 'article/create.html', context)

    编写模版文件

  • ..
    标签中的内容就是需要提交的表单。method=”post”指定了表单提交的方式为POST(与视图函数中的request.method相联系);action=”.”指定了表单提交的地址为默认的当前url。

  • 关于{% csrf_token %},它是Django中一个与网络安全相关的中间件验证。目前我们暂时不去深究它的实现,只需要知道表单中必须包含它就可以了,否则将会得到一个403错误。

  • {% endblock content %} ```

    原文:https://www.dusaiphoto.com/article/22/