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和IPython中使用Docker
Apr 28 Python
Python中使用strip()方法删除字符串中空格的教程
May 20 Python
Flask框架配置与调试操作示例
Jul 23 Python
Tesserocr库的正确安装方式
Oct 19 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
python中的colorlog库使用详解
Jul 05 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
Python高级特性 切片 迭代解析
Aug 23 Python
关于pymysql模块的使用以及代码详解
Sep 01 Python
Python循环实现n的全排列功能
Sep 16 Python
python实现逻辑回归的示例
Oct 09 Python
Pytorch中Softmax和LogSoftmax的使用详解
Jun 05 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代码检查代理ip的有效性
2016/08/19 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
JavaScript结合Bootstrap仿微信后台多图文界面管理
2016/07/22 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
Bootstrap CSS布局之图像
2016/12/17 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
JavaScript实现英语单词题库
2019/12/24 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
浅析Python中MySQLdb的事务处理功能
2016/09/21 Python
Python编程之黑板上排列组合,你舍得解开吗
2017/10/30 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
Python中random模块常用方法的使用教程
2020/10/04 Python
python 利用openpyxl读取Excel表格中指定的行或列教程
2021/02/06 Python
分享CSS3制作卡片式图片的方法
2016/07/08 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
实习期自我鉴定
2013/10/11 职场文书
个人现实表现材料
2014/02/04 职场文书
家长会主持词
2014/03/26 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
机械系毕业生求职信
2014/05/28 职场文书
纺织工程专业推荐信
2014/09/08 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
区域销售大会开幕词
2016/03/04 职场文书
利用JuiceFS使MySQL 备份验证性能提升 10 倍
2022/03/17 MySQL
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
索尼ICF-5900W收音机测评
2022/04/24 无线电