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 13 Python
简单谈谈Python流程控制语句
Dec 04 Python
Python类的动态修改的实例方法
Mar 24 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
python添加菜单图文讲解
Jun 04 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
python 图像处理画一个正弦函数代码实例
Sep 10 Python
Django框架安装方法图文详解
Nov 04 Python
浅谈Python中的字符串
Jun 10 Python
pandas DataFrame运算的实现
Jun 14 Python
python实现文件+参数发送request的实例代码
Jan 05 Python
解决Jupyter-notebook不弹出默认浏览器的问题
Mar 30 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实现微信扫码自动登陆与注册功能
2016/09/22 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
Yii2框架redis基本应用示例
2018/07/13 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
php设计模式之备忘模式分析【星际争霸游戏案例】
2020/03/24 PHP
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
angular4自定义组件详解
2017/09/28 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
vue2.0父子组件间传递数据的方法
2018/08/16 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
vue data对象重新赋值无效(未更改)的解决方式
2020/07/24 Javascript
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
python学习入门细节知识点
2018/03/29 Python
详解Python3 对象组合zip()和回退方式*zip
2019/05/15 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
Python定时器线程池原理详解
2020/02/26 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
教师工作决心书
2015/02/04 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
申请吧主发表的感言
2015/08/03 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
nginx 防盗链防爬虫配置详解
2021/03/31 Servers
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
Java 在线考试云平台的实现
2021/11/23 Java/Android
详解Vue3使用axios的配置教程
2022/04/29 Vue.js