Django学习系列(四.路由&请求)
「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」
前言
这个其实主要详细说说那个路由,也就是我们的浏览器客户端访问的请求路径的问题。 和我们如何通过它或获取参数,以及如何通过请求(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))
转载自:https://juejin.cn/post/7058498617144770573