likes
comments
collection
share

Django学习系列(四.路由&请求)

作者站长头像
站长
· 阅读数 18

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战


前言

这个其实主要详细说说那个路由,也就是我们的浏览器客户端访问的请求路径的问题。 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

子路由

注意默认的path 这个在先前的博客说到很清楚了.(写博客的最主要的目的还是为我自己服务的,我只是将它整理公开了罢了,如果你们觉得乱要么是你没有按顺序看我的博客,这玩意是有顺序的,像这种学习博客.要么就是没有认真看,或者你就是接受不了这种风格.这个都无所谓,还是那句话,这个主要是为我自己服务的,你白嫖还有理了??!!!私信本人大概率不回,没开,除非付费) Django学习系列(一.初识)

路由反向解析

这个作用就是为了动态的加载请求路径,放置路径更改导致客户端请求失败,这个要配合模板语法.在客户端.

    url(r'^admin/', admin.site.urls,name="admin"),
    url('',views.hello),
    url(r"^app/", include(("APP.urls","APP"),namespace="APP")),#在根路由里面注册子路由

url(r"^app/", include("APP.urls",namespace="APP"))这样写也可以,但是在子路由里面得加个app_name

app_name='APP'
urlpatterns = [
    path('',index,name='index'),
]

在子路由里面是这样的

from django.conf.urls import url
from Two import views
#创建子路由
urlpatterns=[
    url(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))