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的print用法示例
Feb 11 Python
python获取元素在数组中索引号的方法
Jul 15 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
Pandas之drop_duplicates:去除重复项方法
Apr 18 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
如何用C代码给Python写扩展库(Cython)
May 17 Python
Python socket实现的文件下载器功能示例
Nov 15 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
浅析Python 责任链设计模式
Sep 11 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
Jan 30 Python
整理Python中常用的conda命令操作
Jun 15 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 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
isset和empty的区别
2007/01/15 PHP
php 过滤器实现代码
2010/08/09 PHP
PHP导出Excel实例讲解
2016/01/24 PHP
iframe 父窗口和子窗口相互的调用方法集锦
2010/12/15 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
js实现照片墙功能实例
2015/02/05 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
JavaScript手风琴页面制作
2017/05/17 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
vue开发调试神器vue-devtools使用详解
2017/07/13 Javascript
vue实现重置表单信息为空的方法
2018/09/29 Javascript
关于AOP在JS中的实现与应用详解
2019/05/06 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
Vue-router编程式导航的两种实现代码
2021/03/04 Vue.js
在Python中实现贪婪排名算法的教程
2015/04/17 Python
python中argparse模块用法实例详解
2015/06/03 Python
实例讲解Python设计模式编程之工厂方法模式的使用
2016/03/02 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
python中csv文件的若干读写方法小结
2018/07/04 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
HTML5+JS实现俄罗斯方块原理及具体步骤
2013/11/29 HTML / CSS
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
linux下进程间通信的方式
2014/12/23 面试题
安全生产检讨书
2014/01/21 职场文书
小学教师国培感言
2014/02/08 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
CI Games宣布《堕落之王2》使用虚幻引擎5制作 预计将于2023年正式发售
2022/04/11 其他游戏