Django框架的使用教程--路由-请求-响应[四]
路由
路由可以定义在工程的目录下(看你的需求),也可以定义在各个应用中来保存应用的路由,用主路文件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反解析(子应用的路由都需要命名)
注意点:
- 对于未指明namespace的,reverse(路由name)
- 对于指明namespace的,reverse(命名空间namespace:路由name)
from django.shortcuts import render # Create your views here.
from django.http import HttpResponse
from django.urls import reverse def index(request): return HttpResponse('欢迎来到Gaidy博客') def show(request):
url = reverse('users:index')
print(url)
return HttpResponse('OK')
请求(POST,PUT,PATCH,DELETE)默认开启CSRF防护
post请求那些需要到postman测试工具里面测试
先把CSRF防护注释掉

向服务器传递参数的方式
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) #
print(b) #
print(alist) # ['1', '3']
return HttpResponse('OK')
运行(后面在加)

请求体(传递参数)
表单类
路由设置
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')
运行


非表单类
路由
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')
运行

请求头(传递参数)
可以通过request.META属性获取请求头headers的数据
路由
url(r'^get_head/$', views.get_head)
视图函数
def get_head(request):
print(request.META['CONTENT_TYPE'])
return HttpResponse('OK')
运行

常见的请求头
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).
响应
HttpResponse提供一系列子类
- HttpResponseRedirect 301
- HttpResponsePermanentRedirect 302
- HttpResponseNotModified 304
- HttpResponseBadRequest 400
- HttpResponseNotFound 404
- HttpResponseForbidden 403
- HttpResponseNotAllowed 405
- HttpResponseGone 410
- 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': ''})
运行结果

redirect重定向
from django.shortcuts import redirect # django_test是路由的空间命名
def show(request):
# 重定向
return redirect(reverse('django_test:index'))
Django框架的使用教程--路由-请求-响应[四]的更多相关文章
- Django REST FrameWork中文教程2:请求和响应
从这一点开始,我们将真正开始覆盖REST框架的核心.我们来介绍几个基本的构建块. 请求对象REST框架引入了Request扩展常规的对象HttpRequest,并提供更灵活的请求解析.Request对 ...
- 第三百一十五节,Django框架,CSRF跨站请求伪造
第三百一十五节,Django框架,CSRF跨站请求伪造 全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...
- Django框架的使用教程--视图和路由[二]
视图和路由 1.创建一个django_test应用 2.setting中设置django_test INSTALLED_APPS = [ 'django.contrib.admin', 'django ...
- 十三 Django框架,CSRF跨站请求伪造
全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMidd ...
- Django框架基础知识09-请求与响应
视图函数接受到的request到底是个什么对象呢? HttpRequest对象: 服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest ...
- 从零开始设计SOA框架(二):请求/响应参数的设计
每个接口都有请求参数.响应参数.其中请求参数分为公共参数和业务参数.响应参数分为两类:正常的响应参数.统一的错误参数 一.请求参数 1.公共参数:每个接口都有的参数,主要包含appkey.时间戳. ...
- Django框架的使用教程--类视图-中间间-模板[六]
类视图 类视图的使用 视图函数 class class_view(View): """类视图""" def get(self, reques ...
- Django框架的使用教程--Cookie-Session[五]
Cookie cookie是存储在浏览器中的一段文本信息,下次同一网站请求,就会发送该cookie给服务器,一般的浏览器都有启动cookie,用cookie存储信息,最好不要存储密码,cookie也有 ...
- Django框架的使用教程--环境的搭建和项目的创建[一]
Django环境的搭建 Django 常用的命令 # 创建一个名为Django_test子应用 python manage.py startapp Django_test # 生成迁移文件 pytho ...
随机推荐
- 全网最详细的IDEA、Eclipse和MyEclipse之间于Java web项目发布到Tomcat上运行成功的对比事宜【博主强烈推荐】【适合普通的还是Maven方式创建的】(图文详解)
不多说,直接上干货! IDEA [适合公司业务]全网最详细的IDEA里如何正确新建[普通或者Maven]的Java web项目并发布到Tomcat上运行成功[博主强烈推荐](类似eclipse里同一个 ...
- nginx介绍(五) - 高可用
前言 即便想 nginx 这么牛B的服务器, 也不能保证他不挂啊, 就算不是机器出故障, 比如, 停电了, 那么机器挂了, 很正常啊. 这时候, 没有分发服务器, 网站就不能正常访问了, 咋搞? 网站 ...
- 动态规划法(八)最大子数组问题(maximum subarray problem)
问题简介 本文将介绍计算机算法中的经典问题--最大子数组问题(maximum subarray problem).所谓的最大子数组问题,指的是:给定一个数组A,寻找A的和最大的非空连续子数组.比如 ...
- [转]window7下利用DockerToolbox安装Docker
本文转自:https://blog.csdn.net/qq2712193/article/details/54576313 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- SignalR 自寄宿
源代码 https://github.com/xlb378917466/Chat.Server 1.使用控制台程序来寄宿SignalR的服务端,这需要借助于Owin中间件, 2.实现一个服务端的Cha ...
- 深入理解RDD原理
首先我们来了解一些Spark的优势:1.每一个作业独立调度,可以把所有的作业做一个图进行调度,各个作业之间相互依赖,在调度过程中一起调度,速度快.2.所有过程都基于内存,所以通常也将Spark称作是基 ...
- IDEA从SVN中导入多模块项目
idea多模块项目的导入 在IntelliJ IDEA中间新建一个空项目,名字可以是svn要检索的的项目名称,原则是开心就好: 现在,我们将我们在svn中的多模块的项目down下来 选中顶部的导航中的 ...
- springboot整合freemarker----一点小小的错误
最近小弟正在学习springboot,没办法,现在微服务太火了.小弟也要顺应时代的潮流啊 :( 好了,废话不多说了!!!! 首先在springboot的pom.xml添加freemarker的依赖 & ...
- Nginx学习笔记(三)--- Nginx实现反向代理和配置负载均衡
1.反向代理 2.Nginx反向代理流程图 3.安装多个tomcat 3.1把tomcat的压缩包传到Linux上 3.2 解压tomcat 3.3 给压缩好的tomcat改个名字用来区分一下 3.4 ...
- 每个JavaScript工程师都应懂的33个概念
摘要: 基础很重要啊! 原文:33 concepts every JavaScript developer should know 译文:每个 JavaScript 工程师都应懂的33个概念 作者:s ...