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 多进程通信模块的简单实现
Feb 20 Python
python通过线程实现定时器timer的方法
Mar 16 Python
Python基于scrapy采集数据时使用代理服务器的方法
Apr 16 Python
python基于urllib实现按照百度音乐分类下载mp3的方法
May 25 Python
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
dataframe设置两个条件取值的实例
Apr 12 Python
mac 安装python网络请求包requests方法
Jun 13 Python
Python3匿名函数用法示例
Jul 25 Python
Python类的继承用法示例
Jan 31 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
Python读写csv文件流程及异常解决
Oct 20 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
Dec 31 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
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
2011/10/09 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
轻松创建nodejs服务器(3):代码模块化
2014/12/18 NodeJs
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JS取得绝对路径的实现代码
2015/01/16 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
BootStrap中的table实现数据填充与分页应用小结
2016/05/26 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
2019/04/08 Javascript
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
pyqt5 QProgressBar清空进度条的实例
2019/06/21 Python
Python 日志logging模块用法简单示例
2019/10/18 Python
Pandas的Apply函数具体使用
2020/07/21 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
马来西亚演唱会订票网站:StubHub马来西亚
2018/10/18 全球购物
美国珠宝店:Helzberg Diamonds
2018/10/24 全球购物
MVC的各个部分都有那些技术来实现?如何实现?
2016/04/21 面试题
如何定义一个可复用的服务
2014/09/30 面试题
公司前台接待岗位职责
2013/12/03 职场文书
求职信结尾怎么写
2014/05/26 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
幼儿园教学反思范文
2016/03/02 职场文书