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操作字典类型的常用方法(推荐)
May 16 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
Jan 10 Python
Python Django 封装分页成通用的模块详解
Aug 21 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
Python中xml和dict格式转换的示例代码
Nov 07 Python
Python reduce函数作用及实例解析
May 08 Python
实现ECharts双Y轴左右刻度线一致的例子
May 16 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
May 24 Python
PyTorch中Tensor的数据类型和运算的使用
Sep 03 Python
python递归函数用法详解
Oct 26 Python
Python如何让字典保持有序排列
Apr 29 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
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
PHP页面中文乱码分析
2013/10/29 PHP
php 开发中加密的几种方法总结
2017/03/22 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
微信小程序实现图片轮播及文件上传
2017/04/07 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
JS路由跳转的简单实现代码
2017/09/21 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
利用nodeJs anywhere搭建本地服务器环境的方法
2018/05/12 NodeJs
javascript中的event loop事件循环详解
2018/12/14 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
windows下python安装paramiko模块和pycrypto模块(简单三步)
2017/07/06 Python
详解python while 函数及while和for的区别
2018/09/07 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
python中pygame安装过程(超级详细)
2019/08/04 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
python 爬取疫情数据的源码
2020/02/09 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
python之随机数函数的实现示例
2020/12/30 Python
CSS3中的opacity属性使用教程
2015/08/19 HTML / CSS
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
业务部门经理岗位职责
2014/02/23 职场文书
办公室岗位职责
2015/02/04 职场文书
信息简报范文
2015/07/21 职场文书
参观监狱警示教育心得体会
2016/01/15 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
2016年学校爱国卫生月活动总结
2016/04/06 职场文书