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

Django学习(七)---添加新文章页面的更多相关文章

  1. vue 数组中嵌套的对象添加新属性--页面更新

    vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735

  2. [wordpress使用]003_添加新文章

    当WordPress前面的工作准备的差不多,没什么大问题时,就可以开始为你的博客添加文章,让博客的内容变得更加丰富.既然你已经开始了这个博客,那么就说明你已经有一个明确的方向,知道自己到底要写那些内容 ...

  3. django学习-22.admi管理后台页面的文案展示等相关配置

    目录结果 1.前言 2.完整的操作步骤 2.1.第一步:对[settings.py]里的相关常量的值做如下修改 2.2.第二步:重启django项目[helloworld]的服务 2.3.第三步:重新 ...

  4. Django学习之十三:提高页面开发效率减少冗余的模板系统

    目录 Django 模板 模板语法 逻辑语法 函数式过滤器 内置filter 功能tag 注释 内置tag 导入三方tag and filter(load) 过滤器和功能tag的区别 自定义tag和f ...

  5. django学习-16.返回给前端页面数据为json数据类型的3种方案

    目录结构 1.前言 2.JsonResponse类的源码简单分析 2.1.JsonResponse类的源码如下所示 2.2.JsonResponse类的构造函数里的每个入参的大概含义和作用 3.[方案 ...

  6. Django学习(七) 创建第一个Django项目

    如果这是你第一次使用Django,你必须进行一些初始设置.即,您将需要自动生成一些代码,建立了Django项目. 从命令行.cd进入一个目录,你想要存储您的代码,然后运行以下命令: django-ad ...

  7. Django学习(八)---修改文章和添加文章

    博客页面的修改文章和添加新文章 从主页点击不同文章的超链接进入文章页面,就是传递了一个id作为参数,然后后台代码根据这个参数从数据库中取出来对应的文章,并把它传递到前端页面 修改文章和添加新文章,是要 ...

  8. Django学习(五)---模板扩展,开发博客页面

    (一)博客主页面开发 1.模板中可使用for循环,语法格式为: {% for xs in xxs %} HTML语句 {% endfor %} 2.更改app下的views.py, 获取后台model ...

  9. python django 多级业务树形结构规划及页面渲染

    概述: 在项目中,父级到子级结构并不少见,如果仅仅的两层树形结构,我们可以使用数据库的外键设计轻松做到,子级业务表设计一字段外键到父级业务表,这样子到父.父到子的查询都非常简单. 但是往往父子结构会有 ...

随机推荐

  1. 一不小心,陷入TCP的性能问题

    一.现象 在一次访问请求nginx中,通常只需要几毫秒的RT,但当请求数据达到某一个数值时,rt明显提高,甚至超过了300毫秒. 二.问题的原因 大家都知道,TCP为了提高带宽利用率和吞吐量,做了各种 ...

  2. Java 9 揭秘(1.Java入门介绍)

    文 by / 林本托 在第一部分中,主要讲解如下内容: JDK 9 包含了哪些内容 运行代码的系统要求 如何安装 NetBeans 1 JDK 介绍 JDK 9是Java开发工具包的第九个主要版本,计 ...

  3. Hadoop化繁为简(二)—层层递进轻松入门hdfs

    层层递进-解开hdfs的面纱 1.hdfs是什么?它与普通服务器的文件系统有什么区别?它的特性有什么? 2.hdfs的工作原理是怎样的? 3.每台机器都单独启动有什么弊端?假设有1000台机器需要启动 ...

  4. D语言需要大公司支持

    Facebook开源flint:一个用D语言编写的C++静态代码分析器 http://www.csdn.net/article/2014-02-27/2818565-Building-and-open ...

  5. Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)

    例子: 定义泛型Store package javabased; public interface Store<T> { } 两个实现类StringStore,IntegerStore p ...

  6. vue初学实践之路——vue简单日历组件(1)

    ---恢复内容开始--- 最近做的项目有一个需求,需要有一个日历组件供预定功能使用,之前的代码过于繁琐复杂,所以我采用vue重写了这个组件. npm.vue等等安装. 只是一个简单的日历组件,所以并不 ...

  7. 二阶段项目所遇问题 如何实现php向js传输数据

    首先当前页面做了一个双处理的界面,就是有PhP也有JS的处理界面. 上一个传值界面是一个PHP的传值,结果,在当前页面的JS中也要用到上一界面传的值,这时发现,PHP与JS就像是两个互相孤立的小岛,根 ...

  8. 基于Vue全家桶开发的前端组件管理平台

    项目背景 项目背景是外包类建站公司里,设计环节沉淀了大量可复用组件,设计师往往只需要微调组件就拼凑出页面,交付给前端,理论上这些组件在前端也可以复用,但实际上前端每次都要重新实现整个页面,浪费很多人力 ...

  9. [USACO08NOV]奶牛混合起来Mixed Up Cows

    题目描述 Each of Farmer John's N (4 <= N <= 16) cows has a unique serial number S_i (1 <= S_i & ...

  10. yii2 入口文件 提示syntax error, unexpected T_OBJECT_OPERATOR

    PHP Version 5.3.3 原因是php的安装版本太低