Django学习系列(四.路由&请求)
Posted HUTEROX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习系列(四.路由&请求)相关的知识,希望对你有一定的参考价值。
前言
这个其实主要详细说说那个路由,也就是我们的浏览器客户端访问的请求路径的问题。
和我们如何通过它或获取参数,以及如何通过请求(GET、POST)获取客户端的参数在Django当中.
路由路径
匹配规则
在Django 当中其实这样的匹配是非严格匹配的,这个的话涉及到一些正则。
例如现在有这样的路由路径。
r"^adminnn"
r"^admin"
在你启动服务后,例如127.0.0.1:8000/admin
这个时候访问的很有可能是adminnn页面。匹配不严格,加上就近原则就导致了这个后果。
所以在书写的时候这个路径必须在后面加个 正斜杠 “/"
通过路由传递参数
假设我有个图片网站,我需要做个分页,那么显然我就需要用到路由来帮我们传递参数,例如有个页面
127.0.0.1:8000/image/
当我们在传递1的时候给出第一页的内容,2的时候给第二页的内容。
127.0.0.1:8000/image/2
这个时候我不可能写一堆路由,那么改如何来做
这个时候就要用到正则了
r"^image/(\\d+)/
这样一来就解决问题了
那么如何拿到参数呢刻个看view 的处理函数
def images(request,id):
pass
这样 id 就是我们拿到的数据
如果我们有多个的话,例如
r"^image/(\\d+)/(\\d+)/
那么我们的接受参数也要有多个,并且这是一一对应的按照顺序
def images(request,id,id1):
pass
这样做显然不太方便,有时候我们的参数顺序可能会搞混,那么我们就需要起个名字.
r"^image/(?P<username>\\d+)/(?P<password>\\d+)/
def images(request,username,password):
pass
子路由
这个在先前的博客说到很清楚了.(写博客的最主要的目的还是为我自己服务的,我只是将它整理公开了罢了,如果你们觉得乱要么是你没有按顺序看我的博客,这玩意是有顺序的,像这种学习博客.要么就是没有认真看,或者你就是接受不了这种风格.这个都无所谓,还是那句话,这个主要是为我自己服务的,你白嫖还有理了??!!!私信本人大概率不回,没开,除非付费)
Django学习系列(一.初识)
路由反向解析
这个作用就是为了动态的加载请求路径,放置路径更改导致客户端请求失败,这个要配合模板语法.在客户端.
path(r'^admin/', admin.site.urls,name="admin"),
path('',views.hello),
path('Two/',include('Two.urls'),namespace="two")#在根路由里面注册子路由
在子路由里面是这样的
from django.urls import path
from Two import views
#创建子路由
urlpatterns=[
path(r'^index/',views.hello,name="hello"),
]
现在访问admin 和 tow/hello
<a href="{% url 'admin' %}"></a>
<a href="{% url 'two:hello' %}"></a>
那么在代码中的话也简单
url = reverse("admin")
url1 = reverse("two:hello")
搞定
GET获取参数
首先是URL的组成,这个玩这个的应该都很熟悉.
这玩意怎么玩呢,那就是通过这几篇博客都没有提到的request.
这里面包含了所有客户端的所有信息,包括COOKIE IP 你的设备型号,甚至你的设备安装的软件.基本上通过request可以获取你电脑上的大部分信息,所以请不要随便访问不知名的恶意网站,尤其是某小网站等等,你的信息暴露无遗.
先说说request大致有哪些玩意吧
request.method
.path
.GET
.POST
.session
这几个东西一目了然,处理session,这个是会话技术,下篇博客就说
现在构造这样一个url
http://127.0.0.1:8000/login?username="jack"&password="123456789"
获取username,password
def get_parmers(request):
username = request.GET.get("username")
password = request.GET.get("password")
这里还有个细节
那就是get拿到的其实不是一个完整的values
假设有这样一个请求
http://127.0.0.1:8000/login?username="jack"&username="surry"
那么现在再来拿到username
def get_parmers(request):
username = request.GET.get("username")
返回结果是:
surry
所以这个时候要这样
def get_parmers(request):
username = request.GET.getlist("username")
结果是个列表
POST获取参数
这个就简单了,更简单了.看这个代码
<form action="/test/" method="POST">
<input name = "username" type = "text">
<button>提交<button>
</form>
def get_parmers(request):
username = request.POST.getlist("username")
直接通过标签的name拿到
META查看所有信息
拿到IP
IP= request.META.get("REMOTE_ADDR")
这个你看了就知道了
for key in request.META:
print(request.META.get(key))
以上是关于Django学习系列(四.路由&请求)的主要内容,如果未能解决你的问题,请参考以下文章
DJANGO入门系列之(Django请求生命周期and路由层)
MybatisPlus实现基本CURD&逻辑删除&代码生成(对标Django系列学习二)