Django学习(七)---添加新文章页面
在template中添加add_article.html页面 (form input)请求方法使用post
这个页面涉及到了两个响应函数 1)显示页面的响应函数 2)表单提交的响应函数
add_article.html如下:
<!DOCTYPE html> <html> <head> <title>增加新文章</title> </head> <body> <form action="{% url 'blog:edit_article' %}" method="post"> {% csrf_token %} 文章标题<input type="text" name='title' /> <br> 文章内容<input type="text" name='content'/> <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 url from . import views urlpatterns = [ 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 url from . import views urlpatterns = [ 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, 点击添加新文章,完成文章标题和内容的填写,点击提交