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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
python3调用R的示例代码
Feb 23 Python
浅谈python新式类和旧式类区别
Apr 26 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
jupyter notebook中美观显示矩阵实例
Apr 17 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
pycharm实现猜数游戏
Dec 07 Python
解决selenium+Headless Chrome实现不弹出浏览器自动化登录的问题
Jan 09 Python
Spy++的使用方法及下载教程
Jan 29 Python
Python自动化爬取天眼查数据的实现
Jun 15 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微框架Dispatch简介
2014/06/12 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
PHP实现通过正则表达式替换回调的内容标签
2015/06/15 PHP
RSA实现JS前端加密与PHP后端解密功能示例
2019/08/05 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
兼容IE、FireFox、Chrome等浏览器的xml处理函数js代码
2011/11/30 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
jQuery 3.0 的变化及使用方法
2016/02/01 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
几行js代码实现自适应
2017/02/24 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
简单了解微信小程序的目录结构
2019/07/01 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
简单解析Django框架中的表单验证
2015/07/17 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
Python创建自己的加密货币的示例
2021/03/01 Python
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
兼职学生的自我评价
2013/11/24 职场文书
如何客观的进行自我评价
2013/12/17 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
社区服务活动小结
2014/07/08 职场文书
有限责任公司股东合作协议书
2014/12/02 职场文书
婚宴邀请函
2015/01/30 职场文书
求职信范文怎么写
2015/03/19 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android