Django②

然后继续继续。分开写。慢慢来

其实我觉得这些都是很低级的那种,写了感觉有点赘余,不写的话,又怕真的有新手不会。就当我啰嗦吧。多写点。自己到时候有什么补充继续补上去。

url的使用

正常启动一个项目的时候,会出现之前的那种。是因为你没有配置url。当我们打开一个网页,在网页上随便点,都会跳向新的页面。因为在后台已经给他配置好了它要去某个地方。这就是url配置。脑补下 html  a链接 差不多有这个意思

url默认是在主目录中,主路由配置文件,会包含最基本的地址映射,并且每个地址访问都必须要先经过该文件。通过 urls中定义好的地址找到对应的视图处理函数

#url.py
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

这个是创建项目的时候。

Django如何处理一个请求

当一个用户请求Django 站点的一个页面,下面是Django 系统决定执行哪个Python 代码遵循的算法:

1:Django 决定要使用的根URLconf 模块。通常,这个值就是ROOT_URLCONF 的设置,但是如果进来的HttpRequest 对象具有一个urlconf 属性

(通过中间件request processing 设置),则使用这个值来替换ROOT_URLCONF 设置。

2:Django 加载该Python 模块并寻找可用的urlpatterns。它是django.conf.urls.url() 实例的一个Python 列表。

3:Django 依次匹配每个URL 模式,在与请求的URL 匹配的第一个模式停下来。

4:一旦其中的一个正则表达式匹配上,Django 将导入并调用给出的视图,它是一个简单的Python 函数(或者一个基于类的视图)。视图将获得如下参数:

一个HttpRequest 实例。

如果匹配的正则表达式返回了没有命名的组,那么正则表达式匹配的内容将作为位置参数提供给视图。

关键字参数由正则表达式匹配的命名组组成,但是可以被django.conf.urls.url()的可选参数kwargs覆盖。

5:如果没有匹配到正则表达式,或者如果过程中抛出一个异常,Django 将调用一个适当的错误处理视图。

比如handler404,handler500,handler403。我们也可以自定义对应的错误视图覆盖提供的默认错误处理视图

 现在随便写个意思下。

#url.py
from django.contrib import admin
from django.http import HttpResponse         #+
from django.urls import path

def demo_view(request):                            #+
    return HttpResponse('cd-demo')            #+

urlpatterns = [
    path('admin/', admin.site.urls),
    path('demo',demo_view)                        #+
]

我在urlpattrens中新添加了一个path,是为了匹配用户的访问路径。添加了一个demo_view视图函数。告诉浏览器,当我们访问http://127.0.0.1:8000/demo 的时候 触发demo_view这个函数 然后给我们返回 cd_demo。正常来讲,我们会创建一个view.py,专门放处理url的视图函数

如若你瞎逼写了个访问路径,肯定会访问不到,给你报错。这是在开发模式下,会告诉你找不到,错误。例如下面,我随便写了一个url,就会这样。另外在上线的时候,修改setting中 DEBUE = Flase 。会给你返回404错误。

然后细说一下。   


django1.X路由的url与2.X路由path语法

引用路径的区别:

  • 1.X: 使用的是django.conf.urls.urldjango.conf.urls.include
  • 2.X: 使用的是django.urls.pathdjango.urls.includedjango.urls.re_path

引入正则的区别:

  • 1.X:
    下面的示例使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图
    在更高级的用法中,可以使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。
    在Python的正则表达式中,分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式
urlpatterns = [
    url('index-(\d+)-(\d+).html',views.index),
    url('index-(?P<article_type_id>\d+)-(?P<category_id>\d+).html',views.index)
]
#url请求地址为:http://127.0.0.1:8000/index-1-1.html
  • 2.X:
    基本规则:
  • 使用尖括号(<>)从url中捕获值。
  • 捕获值中可以包含一个转化器类型(converter type),比如使用 <int:name> 捕获一个整数变量。若果没 有转化器,将匹配任何字符串,当然也包括了 / 字符。
  • 无需添加前导斜杠。
urlpatterns = [
    path('index-<int:article_type_id>-<int:category_id>.html',views.index),
]
#url请求地址为:http://127.0.0.1:8000/index-1-1.html

在Python正则表达式中,命名式分组语法为 (?P<name>pattern) ,其中name为名称, pattern为待匹配的模式。这个与1.X的用法差不多,就是将1.X的url,改为re_path,
例子:

urlpatterns = [
    path('articles/2003/', views.special_case_2003),
    re_path('articles/(?P<year>[0-9]{4})/', views.year_archive),
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/', views.month_archive),
    re_path('articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[^/]+)/', views.article_detail),
]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值