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学习系列(四.路由&请求)的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维Python系列之Django进阶操作

DJANGO入门系列之(Django请求生命周期and路由层)

Django学习系列之路由系统

MybatisPlus实现基本CURD&逻辑删除&代码生成(对标Django系列学习二)

Django学习系列(五.会话技术Cookie&Session&Token)

ThinkPHP框架 _ 学习3