Python3+Django get/post请求实现教程详解


Posted in Python onFebruary 16, 2021

一、说明

之前写了一篇“Python3+PyCharm+Django+Django REST framework开发教程 ”,想着直接介绍rest就完了。但回过头来看,一是rest在解耦的同时将框架复杂化了如果没有多终端那rest根本没有降低复杂度反而增加了复杂度,二是基础的get和post实现自己还是看半天。所以还是有必要再写一篇来介绍django常规的MVC开发。

环境搭建程项目创建都类似的的rest化部分之前(2.5及之前)进行操作即可,就不重复说明了。这里我创建的项目为django1,初始目录结构如下

Python3+Django get/post请求实现教程详解

二、环境配置

如果自己创建的项目不叫django1,则以下所有django1修改为自己的项目名。

 2.1 自定义模版路径及创建模版

编缉django1/django1/setting.py,定位到TEMPLATES变量,将DIRS的值修改为BASE_DIR+"/django1/templates",

在django1/django1目录下创建templates文件夹,并在其下创建get.html、post.html、result.html三个文件。

get.html,用于get提交:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>get请求示例</title>
</head>
<body>
  <form action="/get" method="get">
    <input type="text" name="q" />
    <input type="submit" value="搜索" />
  </form>
</body>
</html>

post.html,用于post提交。{%%}表示其内是Django模板语句,{% csrf_token %}指示此表单加载时返回token在其提交时进行token认证(如果要关闭服务端该csrf附御功能将setting.py----MIDDLEWARE----'django.middleware.csrf.CsrfViewMiddleware'注释掉):

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>post请求示例</title>
</head>
<body>
  <form action="/post" method="post">
    {% csrf_token %}
    <input type="text" name="q" />
    <input type="submit" value="搜索" />
  </form>
</body>
</html>

result.html,用于显示get和post输入的内容。{{}}表示其内是Django模板变量:

<h1>{{ result }}</h1>

2.2 配置请求路由

Django所有请求路由都由urls.py设置,即便是存在的静态文件(如html)也要配置路由才能访问。

编缉django1/django1/urls.py,修改为以下内容:

from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from . import view

urlpatterns = [
  path('admin/', admin.site.urls),
  # url(r'^hello$', view.hello),
  url(r'^get\.html$', view.get_html),
  url(r'^get$', view.get),
  url(r'^post\.html$', view.post_html),
  url(r'^post$', view.post),
]

2.3 实现处理逻辑

在2.2中我们配置了get.html、get、post.html、post四个请求分别转交到view.get_html、view.get、view.post_html、view.post进行处理。本节我们实现这四个处理逻辑。

在django1/django1文件夹下创建view.py,写入以下内容:

from django.shortcuts import render, render_to_response

def get_html(request):
  return render_to_response('get.html')

def get(request):
  context = {}
  # 通过request.GET['name']形式获取get表单内容
  # result为重定向到的result.html所使用的变量
  context['result'] = f"你搜索的内容为:{request.GET['q']}"
  return render(request, 'result.html', context)

def post_html(request):
  # 不能和get一样使用render_to_response必须使用render进行重定向,不然服务端不会设置csrf_token
  # return render_to_response('post.html')
  return render(request, 'post.html')

def post(request):
  context = {}
  # 通过request.GET['name']形式获取post表单内容
  # result为重定向到的result.html所使用的变量
  context['result'] = f"你搜索的内容为:{request.POST['q']}"
  return render(request, 'result.html', context)

其中注意如注释所强调,post_html中不能使用render_to_response必须使用render进行重定向,不然服务器不能成功返回token导致token验证失败进而导致不能访问页面(403,CSRF token missing or incorrect.)。如下图所示:

Python3+Django get/post请求实现教程详解

另外,如上所示返回了详细的错误信息,这在信息安全中是忌讳但这并不是django没考滤到,而是Django默认开启DEBUG模式,到settings.py中设置DEBUG = False,并设置ALLOWED_HOSTS即可(ALLOWED_HOSTS不是指允许访问服务的IP而是允许外部访问服务地址)。

Python3+Django get/post请求实现教程详解

三、运行效果

3.1 总体目录结构

经第二大节所有操作,项目目录结构如下图所示(.idea和__pycache__不用管): 

Python3+Django get/post请求实现教程详解

3.2 运行效果

get请求页面:

Python3+Django get/post请求实现教程详解

get请求结果:

Python3+Django get/post请求实现教程详解

post请求页面:

Python3+Django get/post请求实现教程详解

post请求结果:

Python3+Django get/post请求实现教程详解

本文主要介绍了Django中get/post请求实现简单方法,想了解更多关于Django的使用教程请查看下面的相关链接

Python 相关文章推荐
Python开发之快速搭建自动回复微信公众号功能
Apr 22 Python
Python匹配中文的正则表达式
May 11 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
Python实现的读写json文件功能示例
Jun 05 Python
python-opencv获取二值图像轮廓及中心点坐标的代码
Aug 27 Python
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
Sep 06 Python
浅析python中while循环和for循环
Nov 19 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
opencv resize图片为正方形尺寸的实现方法
Dec 26 Python
TensorFlow自定义损失函数来预测商品销售量
Feb 05 Python
django 认证类配置实现
Nov 11 Python
Python3+Flask安装使用教程详解
Feb 16 #Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 #Python
Python LMDB库的使用示例
Feb 14 #Python
python 装饰器重要在哪
Feb 14 #Python
python爬虫如何解决图片验证码
Feb 14 #Python
Python实现粒子群算法的示例
Feb 14 #Python
Python中对象的比较操作==和is区别详析
Feb 12 #Python
You might like
手把手教你使用DedeCms V3的在线采集图文教程
2007/04/03 PHP
使用PHP静态变量当缓存的方法
2013/11/13 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
javascript offsetX与layerX区别
2010/03/12 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
用最简单的方法判断JavaScript中this的指向(推荐)
2017/09/04 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
小程序转发探索示例
2019/02/19 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
python中Genarator函数用法分析
2015/04/08 Python
Python简单进程锁代码实例
2015/04/27 Python
python:socket传输大文件示例
2017/01/18 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
Python跳出多重循环的方法示例
2019/07/03 Python
numpy数组广播的机制
2019/07/12 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
python 解决cv2绘制中文乱码问题
2019/12/23 Python
澳大利亚领先的优质葡萄酒拍卖会:Langton’s Fine Wines
2019/03/24 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
应届生法律顾问求职信
2013/11/19 职场文书
历史专业学生的自我评价
2014/02/28 职场文书
新春联欢会主持词
2014/03/24 职场文书
公司授权委托书样本
2014/09/15 职场文书
2014年学生工作总结
2014/11/20 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
工地材料员岗位职责
2015/04/11 职场文书
幸福来敲门观后感
2015/06/04 职场文书
Go语言特点及基本数据类型使用详解
2022/03/21 Golang