Django框架的使用教程路由请求响应的方法


Posted in Python onJuly 03, 2018

路由

路由可以定义在工程的目录下(看你的需求),也可以定义在各个应用中来保存应用的路由,用主路文件urls中使用include()包含各个应用的子路由的数据

路由的解析顺序

Django接收到请求后,从主路由文件urlpatterns中的路由从上倒下顺序查找,如果有include包含,则进入子应用的urls中的urlpatterns中查找(从上而下)

路由的结尾斜线

Django有/结尾路由,用户不需要加/,就可以直接重定向到/结尾的路径上

路由命名(可以避免不同应用使用相同名字发生冲突)

如:

# 主路由
from django.conf.urls import url,include
from django.contrib import admin
import django_test.urls

urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^users/',include(django_test.urls ,namespace='users'))
]

reverser反解析(子应用的路由都需要命名)

注意点:

  1. 对于未指明namespace的,reverse(路由name)
  2. 对于指明namespace的,reverse(命名空间namespace:路由name)

请求(POST,PUT,PATCH,DELETE)默认开启CSRF防护

post请求那些需要到postman测试工具里面测试

先把CSRF防护注释掉

Django框架的使用教程路由请求响应的方法

向服务器传递参数的方式

URL:直接在URL中传递数据

查询字符串:key1=value1&key2=value2;

请求体:在body中传递数据,常见有表单,json,xml

请求头:在http报文头中

URL参数传递

未定义参数顺序传递

子应用的路由设置

urlpatterns = [
  # 这边定义子应用的路由
  url(r'^index/$',views.index,name='index'),
  url(r'^show/$',views.show,name='show'),
  url(r'^parameter/([a-z]+)/(\d{4})$',views.parameter,name='parameter'),
]

定义视图函数

# name,和age参数位置调换会影响下面的输出结果
def parameter(request,name, age):

  print('age=%s'%age)
  print('name=%s' % name)
  return HttpResponse('OK')

命名参数按照名字传递

子路由

urlpatterns = [
  # 这边定义子应用的路由
  url(r'^index/$',views.index,name='index'),
  url(r'^show/$',views.show,name='show'),
  url(r'^parameter/(?P<name>[a-z]+)/(?P<age>\d{4})$',views.parameter,name='parameter'),
]

视图函数

# age 和name位置改变值不变
def parameter(request,age, name):

  print('age=%s'%age)
  print('name=%s' % name)
  return HttpResponse('OK')

查询字符串(传递参数)

注意:查询字符串不区分请求方式,即假使客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据。

子路由

url(r'^qust/$',views.qust),

视图函数

def qust(request):
  a = request.GET.get('a')
  b = request.GET.get('b')
  alist = request.GET.getlist('a')
  print(a) # 3
  print(b) # 2
  print(alist) # ['1', '3']
  return HttpResponse('OK')

运行(后面在加)

Django框架的使用教程路由请求响应的方法

请求体(传递参数)

表单类

路由设置

url(r'^get_form/$', views.get_form)

视图函数

def get_form(request):
  name = request.POST.get('name')
  age = request.POST.get('age')
  alist = request.POST.getlist('name')
  print(name)
  print(age)
  print(alist)
  return HttpResponse('OK')

运行

Django框架的使用教程路由请求响应的方法

Django框架的使用教程路由请求响应的方法

非表单类

路由

url(r'^get_body_json/$', views.get_body_json),

视图

def get_body_json(request):
  json_str = request.body
  json_str = json_str.decode() # python3.6 无需执行此步
  req_data = json.loads(json_str)
  print(req_data['a'])
  print(req_data['b'])
  return HttpResponse('OK')

运行

Django框架的使用教程路由请求响应的方法

请求头(传递参数)

可以通过request.META属性获取请求头headers的数据

路由

url(r'^get_head/$', views.get_head)

视图函数

def get_head(request):
  print(request.META['CONTENT_TYPE'])
  return HttpResponse('OK')

运行

Django框架的使用教程路由请求响应的方法

常见的请求头

CONTENT_LENGTH ? The length of the request body (as a string).

CONTENT_TYPE ? The MIME type of the request body.

HTTP_ACCEPT ? Acceptable content types for the response.

HTTP_ACCEPT_ENCODING ? Acceptable encodings for the response.

HTTP_ACCEPT_LANGUAGE ? Acceptable languages for the response.

HTTP_HOST ? The HTTP Host header sent by the client.

HTTP_REFERER ? The referring page, if any.

HTTP_USER_AGENT ? The client's user-agent string.

QUERY_STRING ? The query string, as a single (unparsed) string.

REMOTE_ADDR ? The IP address of the client.

REMOTE_HOST ? The hostname of the client.

REMOTE_USER ? The user authenticated by the Web server, if any.

REQUEST_METHOD ? A string such as  "GET" or  "POST" .

SERVER_NAME ? The hostname of the server.

SERVER_PORT ? The port of the server (as a string).

响应

  1.  HttpResponse提供一系列子类
  2. HttpResponseRedirect 301
  3. HttpResponsePermanentRedirect 302
  4. HttpResponseNotModified 304
  5. HttpResponseBadRequest 400
  6. HttpResponseNotFound 404
  7. HttpResponseForbidden 403
  8. HttpResponseNotAllowed 405
  9. HttpResponseGone 410
  10. HttpResponseServerError 500

案例 # HttpResponse(content=响应体,content_type=响应数据类型,status=状态码)

# content:表示返回的内容
# status_code:返回的HTTP响应状态码
# content_type: 指定返回数据的MIME类型
from django_http import HttpResponse

def index(request):
  return HttpResponse('欢迎来到Gaidy博客', status=202)

JsonResponse(返回的json数据)

from django.http import JsonResponse

def index(request):
  return JsonResponse({'name': 'gaidy', 'age': '25'})

运行结果

Django框架的使用教程路由请求响应的方法

redirect重定向

from django.shortcuts import redirect

# django_test是路由的空间命名
def show(request):
  # 重定向
  return redirect(reverse('django_test:index'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中函数的多种格式和使用实例及小技巧
Apr 13 Python
Python3通过Luhn算法快速验证信用卡卡号的方法
May 14 Python
Python 文件管理实例详解
Nov 10 Python
全面了解python字符串和字典
Jul 07 Python
浅谈django model postgres的json字段编码问题
Jan 05 Python
使用python编写udp协议的ping程序方法
Apr 22 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
Python单元测试unittest的具体使用示例
Dec 17 Python
10 行Python 代码实现 AI 目标检测技术【推荐】
Jun 14 Python
Python Pandas实现数据分组求平均值并填充nan的示例
Jul 04 Python
django中瀑布流写法实例代码
Oct 14 Python
图解Python中深浅copy(通俗易懂)
Sep 03 Python
pandas 选择某几列的方法
Jul 03 #Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 #Python
Python对数据进行插值和下采样的方法
Jul 03 #Python
pandas 将list切分后存入DataFrame中的实例
Jul 03 #Python
python之django母板页面的使用
Jul 03 #Python
Python中存取文件的4种不同操作
Jul 02 #Python
python二维列表一维列表的互相转换实例
Jul 02 #Python
You might like
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
PHP连接和操作MySQL数据库基础教程
2014/09/29 PHP
Joomla简单判断用户是否登录的方法
2016/05/04 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
extjs 学习笔记 四 带分页的grid
2009/10/20 Javascript
jQuery EasyUI 开源插件套装 完全替代ExtJS
2010/03/24 Javascript
jquery 页面全选框实践代码
2010/04/02 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
微信小程序开发的四十个技术窍门总结(推荐)
2017/01/23 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
小程序图片剪裁加旋转的示例代码
2018/07/10 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
利用Django提供的ModelForm增删改数据的方法
2019/01/06 Python
python os模块简单应用示例
2019/05/23 Python
Django 大文件下载实现过程解析
2019/08/01 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
Pycharm连接gitlab实现过程图解
2020/09/01 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
Origins悦木之源香港官网:雅诗兰黛集团高端植物护肤品牌
2018/03/21 全球购物
财务经理的岗位职责
2013/12/17 职场文书
热门专业求职信
2014/05/24 职场文书
违纪检讨书范文
2015/01/27 职场文书
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
apache ftpserver搭建ftp服务器
2022/05/20 Servers