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同时兼容python2和python3的8个技巧分享
Jul 11 Python
用map函数来完成Python并行任务的简单示例
Apr 02 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
Python实现文件信息进行合并实例代码
Jan 17 Python
Django 连接sql server数据库的方法
Jun 30 Python
python创建文件时去掉非法字符的方法
Oct 31 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
详解使用python绘制混淆矩阵(confusion_matrix)
Jul 14 Python
pytorch 中pad函数toch.nn.functional.pad()的用法
Jan 08 Python
python中pandas对多列进行分组统计的实现
Jun 18 Python
python 字典和列表嵌套用法详解
Jun 29 Python
详解OpenCV曝光融合
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
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
分割GBK中文遭遇乱码的解决方法
2013/08/09 PHP
php自动识别文字编码并转换为目标编码的方法
2015/08/08 PHP
php生成毫秒时间戳的实例讲解
2017/09/22 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
2020/03/16 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
简略的前端架构心得&amp;&amp;基于editor为例子的编码小技巧
2010/11/25 Javascript
基于jquery的滚动鼠标放大缩小图片效果
2011/10/27 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
nodejs命令行参数处理模块commander使用实例
2014/09/17 NodeJs
Javascript 构造函数详解
2014/10/22 Javascript
js仿QQ中对联系人向左滑动、滑出删除按钮的操作
2016/04/07 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
angular和BootStrap3实现购物车功能
2017/01/25 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
JS动画定时器知识总结
2018/03/23 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
JavaScript实现的联动菜单特效示例
2019/07/08 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
学习python的几条建议分享
2013/02/10 Python
python中的__init__ 、__new__、__call__小结
2014/04/25 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
2020/11/17 Python
莫斯科高科技在线商店:KremlinStore
2019/03/13 全球购物
车辆工程专业求职信
2014/04/28 职场文书
2015新学期开学寄语
2015/02/26 职场文书
心理健康教育主题班会
2015/08/13 职场文书
Python 内置函数速查表一览
2021/06/02 Python
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis