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 相关文章推荐
浅谈function(函数)中的动态参数
Apr 30 Python
python tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
python3 property装饰器实现原理与用法示例
May 15 Python
django fernet fields字段加密实践详解
Aug 12 Python
Python编写带选项的命令行程序方法
Aug 13 Python
python批量替换文件名中的共同字符实例
Mar 05 Python
Django Admin设置应用程序及模型顺序方法详解
Apr 01 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
Python常用断言函数实例汇总
Nov 30 Python
浅析Python实现DFA算法
Jun 26 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 分页分组类
2009/12/10 PHP
php数组去重的函数代码
2013/02/03 PHP
php curl选项列表(超详细)
2013/07/01 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
php实现登录页面的简单实例
2019/09/29 PHP
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
JavaScript控制Session操作方法
2013/01/17 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
Jquery 获取对象的几种方式介绍
2014/01/17 Javascript
jQuery实现冻结表头的方法
2015/03/09 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
js监听键盘事件的方法_原生和jquery的区别详解
2016/10/10 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
jQuery倒计时代码(超简单)
2017/02/27 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
利用Tkinter和matplotlib两种方式画饼状图的实例
2017/11/06 Python
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
python如何调用百度识图api
2020/09/29 Python
python利用xlsxwriter模块 操作 Excel
2020/10/14 Python
python3实现飞机大战
2020/11/29 Python
Html5新增标签有哪些
2017/04/13 HTML / CSS
关于践行三严三实的心得体会
2016/01/05 职场文书
汉语拼音教学反思
2016/02/22 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android