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简单读取json文件功能示例
Nov 30 Python
python Flask实现restful api service
Dec 04 Python
对Python3.6 IDLE常用快捷键介绍
Jul 16 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
利用python实现对web服务器的目录探测的方法
Feb 26 Python
python实现统计文本中单词出现的频率详解
May 20 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
Sep 17 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
Apr 10 Python
python opencv角点检测连线功能的实现代码
Nov 24 Python
python通过cython加密代码
Dec 11 Python
python通用数据库操作工具 pydbclib的使用简介
Dec 21 Python
python中Pyqt5使用Qlabel标签播放视频
Apr 22 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 flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
php Session无效分析资料整理
2016/11/29 PHP
ThinkPHP5.1框架页面跳转及修改跳转页面模版示例
2019/05/06 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
将form表单通过ajax实现无刷新提交的简单实例
2016/10/12 Javascript
Google 爬虫如何抓取 JavaScript 的内容
2017/04/07 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
Seajs源码详解分析
2019/04/02 Javascript
微信小程序中为什么使用var that=this
2019/08/27 Javascript
使用Vue调取接口,并渲染数据的示例代码
2019/10/28 Javascript
js实现页面导航层级指示效果
2020/08/25 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
python处理Excel xlrd的简单使用
2017/09/12 Python
Python AES加密实例解析
2018/01/18 Python
Numpy数据类型转换astype,dtype的方法
2018/06/09 Python
python 基于opencv实现图像增强
2020/12/23 Python
HTML5通用接口详解
2016/06/12 HTML / CSS
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
在校大学生个人的自我评价
2014/02/13 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
2014年市场部工作总结
2014/11/25 职场文书
毕业纪念册寄语大全
2015/02/26 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
入党转正申请报告
2015/05/15 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS