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进行TCP网络编程的教程
Apr 29 Python
python网络编程之数据传输UDP实例分析
May 20 Python
python urllib爬取百度云连接的实例代码
Jun 19 Python
详谈python中冒号与逗号的区别
Apr 18 Python
windows下numpy下载与安装图文教程
Apr 02 Python
Python箱型图绘制与特征值获取过程解析
Oct 22 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
Python3.9又更新了:dict内置新功能
Feb 28 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
python自动化测试三部曲之request+django实现接口测试
Oct 07 Python
python3 使用ssh隧道连接mysql的操作
Dec 05 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 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
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
PHP解析RSS的方法
2015/03/05 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
jquery判断单个复选框是否被选中的代码
2009/09/03 Javascript
使用Post提交时须将空格转换成加号的解释
2013/01/14 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
angularJs关于指令的一些冷门属性详解
2016/10/24 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
Vue+mui实现图片的本地缓存示例代码
2018/05/24 Javascript
antd Upload 文件上传的示例代码
2018/12/14 Javascript
Vue入门学习笔记【基本概念、对象、过滤器、指令等】
2019/04/13 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
python daemon守护进程实现
2016/08/27 Python
Python制作简易注册登录系统
2016/12/15 Python
Python金融数据可视化汇总
2017/11/17 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
对python sklearn one-hot编码详解
2018/07/10 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
Django中create和save方法的不同
2019/08/13 Python
pytorch 改变tensor尺寸的实现
2020/01/03 Python
python filecmp.dircmp实现递归比对两个目录的方法
2020/05/22 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
博士学位自我鉴定范文
2013/12/26 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
Python实现信息管理系统
2022/06/05 Python