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 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, 点击添加新文章,完成文章标题和内容的填写,点击提交

上一篇:DEDECMS之九 文章采集


下一篇:三种dedecms调用相关文章的方法