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实现哈希表
Feb 07 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
python解析xml文件实例分析
May 27 Python
Pipenv一键搭建python虚拟环境的方法
May 22 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python实战教程之自动扫雷
Jul 13 Python
对python 命令的-u参数详解
Dec 03 Python
python+openCV利用摄像头实现人员活动检测
Jun 22 Python
python tornado使用流生成图片的例子
Nov 18 Python
Python简单实现区域生长方式
Jan 16 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
Mar 02 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
盘点被央视点名过的日本动画电影 一部比一部强
2020/03/08 日漫
php实现parent调用父类的构造方法与被覆写的方法
2015/02/11 PHP
ThinkPHP项目分组配置方法分析
2016/03/23 PHP
phpStudy中升级MySQL版本到5.7.17的方法步骤
2017/08/03 PHP
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
js获取元素到文档区域document的(横向、纵向)坐标的两种方法
2013/05/17 Javascript
javascript数据类型验证方法
2015/12/31 Javascript
jQuery.deferred对象使用详解
2016/03/18 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
Bootstrap table简单使用总结
2017/02/15 Javascript
ejsExcel模板在Vue.js项目中的实际运用
2018/01/27 Javascript
详解 微信小程序开发框架(MINA)
2019/05/17 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
详解Python中break语句的用法
2015/05/14 Python
python用10行代码实现对黄色图片的检测功能
2015/08/10 Python
基于python 处理中文路径的终极解决方法
2018/04/12 Python
pandas实现选取特定索引的行
2018/04/20 Python
python3实现猜数字游戏
2020/12/07 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
电子商务专业自我鉴定
2013/12/18 职场文书
医院学雷锋活动策划方案
2014/02/15 职场文书
广告语设计及教案
2014/03/21 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
领导干部作风建设剖析材料
2014/10/11 职场文书
开学第一周值周总结
2015/07/16 职场文书
自荐信大全
2019/03/21 职场文书
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript