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计算N天之后日期的方法
Mar 31 Python
使用Python编写简单的画图板程序的示例教程
Dec 08 Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 Python
python自定义异常实例详解
Jul 11 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
Python实现简单的用户交互方法详解
Sep 25 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
Pytorch转onnx、torchscript方式
May 25 Python
PyQt5爬取12306车票信息程序的实现
May 14 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 Python
python中__slots__节约内存的具体做法
Jul 04 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 FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
php小技巧之过滤ascii控制字符
2014/05/14 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
php基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
php连接mysql数据库
2017/03/21 PHP
PHP构造二叉树算法示例
2017/06/21 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
jQuery对象与DOM对象之间的转换方法
2010/04/15 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
判断iframe里的页面是否加载完成
2014/06/06 Javascript
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
2017/03/22 jQuery
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
微信小程序开发常见问题及解决方案
2019/07/11 Javascript
Webpack按需加载打包chunk命名的方法
2019/09/22 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
js 函数性能比较方法
2020/08/24 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
python统计一个文本中重复行数的方法
2014/11/19 Python
Python selenium 三种等待方式解读
2016/09/15 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
python实现电子产品商店
2019/02/26 Python
flask框架中的cookie和session使用
2021/01/31 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
您的健身减肥和健康饮食专家:vitafy
2017/06/06 全球购物
2014年图书馆工作总结
2014/11/25 职场文书
团委副书记工作总结
2015/08/14 职场文书
创业计划书之养殖业
2019/10/11 职场文书
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
python 学习GCN图卷积神经网络
2022/05/11 Python
Python可视化神器pyecharts之绘制地理图表练习
2022/07/07 Python