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利用sklearn包编写决策树源代码
Dec 21 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
Python中函数参数调用方式分析
Aug 09 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
Python中print和return的作用及区别解析
May 05 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
利用Python裁切tiff图像且读取tiff,shp文件的实例
Mar 10 Python
通过实例了解python__slots__使用方法
Sep 14 Python
Django中和时区相关的安全问题详解
Oct 12 Python
Python 实现二叉查找树的示例代码
Dec 21 Python
Scrapy+Selenium自动获取cookie爬取网易云音乐个人喜爱歌单
Feb 01 Python
Django集成富文本编辑器summernote的实现步骤
May 31 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下将XML转换为数组
2010/01/01 PHP
destoon找回管理员密码的方法
2014/06/21 PHP
PHP冒泡算法详解(递归实现)
2014/11/10 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
JavaScript prototype属性深入介绍
2012/11/27 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
JavaScript删除数组元素的方法
2015/03/20 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
微信小程序 wxapp内容组件 progress详细介绍
2016/10/31 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
如何让Nodejs支持H5 History模式(connect-history-api-fallback源码分析)
2019/05/30 NodeJs
原生js+canvas实现贪吃蛇效果
2020/08/02 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
Python 文件和输入输出小结
2013/10/09 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python装饰器使用实例详解
2019/12/14 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
趣天网日本站:Qoo10 JP
2019/09/18 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
外语系毕业生求职自荐信
2014/04/12 职场文书
群众路线教育实践活动自我剖析思想汇报
2014/10/04 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
联欢会开场白
2015/06/01 职场文书
自信主题班会
2015/08/14 职场文书
教师岗位说明书
2015/09/30 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
小程序实现悬浮按钮的全过程记录
2021/10/16 HTML / CSS
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫