正文
Django学习(七)---添加新文章页面
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
在template中添加add_article.html页面 (form input)请求方法使用post
这个页面涉及到了两个响应函数 1)显示页面的响应函数 2)表单提交的响应函数
add_article.html如下:
<!DOCTYPE html><html><head> <title>增加新文章</title></head><body><form action="" method="post"> 文章标题<input type="text" /> <br> 文章内容<input type="text" /> <br> <input type="submit" value="提交"></form></body></html>
1)显示页面的响应函数
views.py:
def add_article(request): return render(request,'blog/add_article.html')
配置url,urls.py:
from django.conf.urls import urlfrom . import viewsurlpatterns = [ url(r'^index/$',views.index), url(r'^article/(?P<article_id>[0-9]+)/$',views.page,name='page'), url(r'^addarticle/$',views.add_article)]
2)表单提交的响应函数
在表单里填写的内容,浏览器通过HTTP请求传递到后台的时候,这些数据都会被写在请求中,因此后台代码接受表单数据的过程实际上就是接受HTTP请求中夹带数据的过程。
编辑响应函数
使用 request.POST[' 参数名 '] 获取表单数据 (通过HTTP请求,传递的数据就放在request里,HTTP请求分为post,get等方法,request对不同方法创建了字典,用于存储数据,request.POST里面的键值对就是前端的数据)
取得数据之后,要放入数据库中(models类):
models.Article.objects.create(title,content)创建对象
views.py如下(return响应后的页面,这里跳转到了主页面)
def edit_article(request): title = request.POST.get('title','TITLE')# 第二个参数是默认值 content = request.POST.get('content','CONTENT') models.Article.objects.create(title=title,content=content) articles = models.Article.objects.all() return render(request,'blog/index.html',{'articles':articles})
urls.py:
from django.conf.urls import urlfrom . import viewsurlpatterns = [ url(r'^index/$',views.index), url(r'^article/(?P<article_id>[0-9]+)/$',views.page,name='page'), url(r'^addarticle/$',views.add_article), url(r'^eidtarticle/$',views.edit_article,name='edit_article'),]
add_article.html中表单form的action添加
<form action="{% url 'blog:edit_article' %}" method="post">
打开服务器 localhost:8000/blog/editarticle
在表单中输入后,点击提交,页面会出现
禁止访问(403)
CSRF验证失败,响应中断
这是安全性问题,如果用post提交表单,要在form中加入 {% csrf_token %} 用于防范csrf(跨站请求伪造)
<!DOCTYPE html><html><head> <title>增加新文章</title></head><body><form action="{% url 'blog:edit_article' %}" method="post"> {% csrf_token %} 文章标题<input type="text" /> <br> 文章内容<input type="text" /> <br> <input type="submit" value="提交"></form></body></html>
index.html中添加新文章加上url
<!DOCTYPE html><html><head> <title>第一篇博客</title></head><body><h1><a href="#">我的博客</h1><h3><a href="{% url 'blog:add_article' %}">添加新文章</a></h3>{% for article in articles %} <a href="{% url 'blog:page' article.id %}">{{article.title}}</a> <br/>{% endfor %}</body></html>
打开服务器 localhost:8000/index, 点击添加新文章,完成文章标题和内容的填写,点击提交