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, 点击添加新文章,完成文章标题和内容的填写,点击提交
Django学习(七)---添加新文章页面的更多相关文章
- vue 数组中嵌套的对象添加新属性--页面更新
vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735
- [wordpress使用]003_添加新文章
当WordPress前面的工作准备的差不多,没什么大问题时,就可以开始为你的博客添加文章,让博客的内容变得更加丰富.既然你已经开始了这个博客,那么就说明你已经有一个明确的方向,知道自己到底要写那些内容 ...
- django学习-22.admi管理后台页面的文案展示等相关配置
目录结果 1.前言 2.完整的操作步骤 2.1.第一步:对[settings.py]里的相关常量的值做如下修改 2.2.第二步:重启django项目[helloworld]的服务 2.3.第三步:重新 ...
- Django学习之十三:提高页面开发效率减少冗余的模板系统
目录 Django 模板 模板语法 逻辑语法 函数式过滤器 内置filter 功能tag 注释 内置tag 导入三方tag and filter(load) 过滤器和功能tag的区别 自定义tag和f ...
- django学习-16.返回给前端页面数据为json数据类型的3种方案
目录结构 1.前言 2.JsonResponse类的源码简单分析 2.1.JsonResponse类的源码如下所示 2.2.JsonResponse类的构造函数里的每个入参的大概含义和作用 3.[方案 ...
- Django学习(七) 创建第一个Django项目
如果这是你第一次使用Django,你必须进行一些初始设置.即,您将需要自动生成一些代码,建立了Django项目. 从命令行.cd进入一个目录,你想要存储您的代码,然后运行以下命令: django-ad ...
- Django学习(八)---修改文章和添加文章
博客页面的修改文章和添加新文章 从主页点击不同文章的超链接进入文章页面,就是传递了一个id作为参数,然后后台代码根据这个参数从数据库中取出来对应的文章,并把它传递到前端页面 修改文章和添加新文章,是要 ...
- Django学习(五)---模板扩展,开发博客页面
(一)博客主页面开发 1.模板中可使用for循环,语法格式为: {% for xs in xxs %} HTML语句 {% endfor %} 2.更改app下的views.py, 获取后台model ...
- python django 多级业务树形结构规划及页面渲染
概述: 在项目中,父级到子级结构并不少见,如果仅仅的两层树形结构,我们可以使用数据库的外键设计轻松做到,子级业务表设计一字段外键到父级业务表,这样子到父.父到子的查询都非常简单. 但是往往父子结构会有 ...
随机推荐
- C语言之循环结构
程序结构: 顺序结构 条件结构(分支结构) if结构,if-else结构 ,多重if分支结构,switch结构 循环结构:做重复的事情 while循环,do..while循环和for循环. 写循环结构 ...
- 利用wget检测网页是否正常访问
#!/bin/bash function CheckUrl() { timeout=5 fails=0 success=0 while true do wget --timeout=5 --tries ...
- Java对字符串进行的操作
本篇总结归纳对字符串或数组进行相关操作问题 数组倒序输出 查找字符串中第一次重复的字符 查找字符串中第一次没有重复的字符 删除字符串中重复的元素 倒序输出问题 第一种:对于数组 public int[ ...
- mongo查询系统
首先,我们先向集合(collections)中添加测试文档(documents).如下: > for(i=1;i<=5;i++) db.test.insert({x:i,y:i*i,z:6 ...
- 用hmmlearn学习隐马尔科夫模型HMM
在之前的HMM系列中,我们对隐马尔科夫模型HMM的原理以及三个问题的求解方法做了总结.本文我们就从实践的角度用Python的hmmlearn库来学习HMM的使用.关于hmmlearn的更多资料在官方文 ...
- Webpack 代码分离
Webpack 代码分离 代码分离是 webpack 中最引人注目的特性之一. 你可以把你的代码分离到不同的 bundle 中,然后你就可以去按需加载这些文件. 总的来说, webpack 分离可以分 ...
- EntityFramework Core映射关系详解
前言 Hello,开始回归开始每周更新一到两篇博客,本节我们回归下EF Core基础,来讲述EF Core中到底是如何映射的,废话少说,我们开始. One-Many Relationship(一对多关 ...
- C++将一个数组内容赋给另一个数组
有两种方式: 一.进行数组遍历,依次赋值 ] = { , , , , }; ] ={ }; ;i<sizeof(arr1)/sizeof(int);i++) arr2[i] = arr1[i] ...
- css3动画小案例
今天与大家来分享一下我做的css3动画案例. 在展示我的案例之前先给大家说说实现这个案例所需要的一些属性. transform 属性允许我们对元素进行旋转.缩放.移动或倾斜. 通过 CSS3 2D转换 ...
- 在centos6.7中lnmp环境下安装swoole插件和pthreads插件
1.首先在安装lnmp集成包之前,解压lnmp1.3-full.tar.gz,进入到lnmp1.3-full/include/目录下; 2.输入 vi php.sh;编辑php.sh文档.博主安的是p ...