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生成器(Generator)详解
Apr 13 Python
Python中struct模块对字节流/二进制流的操作教程
Jan 21 Python
Python命令启动Web服务器实例详解
Feb 23 Python
Python利用QQ邮箱发送邮件的实现方法(分享)
Jun 09 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
Python Socket编程之多线程聊天室
Jul 28 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
numpy ndarray 取出满足特定条件的某些行实例
Dec 05 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
Python 如何实现数据库表结构同步
Sep 29 Python
通过实例解析python and和or使用方法
Nov 14 Python
Django集成MongoDB实现过程解析
Dec 01 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
php xml常用函数的集合(比较详细)
2013/06/06 PHP
php通过字符串调用函数示例
2014/03/02 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
php中数组最简单的使用方法
2020/12/27 PHP
基于Jquery的标签智能验证实现代码
2010/12/27 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
JS命令模式例子之菜单程序
2016/10/10 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
详解React 的几种条件渲染以及选择
2018/10/23 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
python分割列表(list)的方法示例
2017/05/07 Python
Django数据库表反向生成实例解析
2018/02/06 Python
基于python调用psutil模块过程解析
2019/12/20 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
HTML5 与 XHTML2
2008/10/17 HTML / CSS
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
物流仓管员工作职责
2014/01/06 职场文书
微信营销策划方案
2014/02/24 职场文书
学习两会精神心得范文
2014/03/17 职场文书
安全宣传标语口号
2014/06/06 职场文书
装修公司管理制度
2015/08/05 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书