zoukankan      html  css  js  c++  java
  • Django学习笔记(二)URL编写规则

    先在根目录以及每个app内添加一个空白的urls.py(此处根目录指项目同名文件夹内)。程序收到用户请求时,先在根目录的urls.py查找该URL属于哪个app,再从app的urls.py找到具体的URL信息。根目录的urls.py配置如下:

    from django.contrib import admin
    from django.urls import path
    
    urlpatterns = [    # 整个项目的URL集合,每个元素代表一条URL信息
        path('admin/', admin.site.urls),  # 设定admin的URL,'admin/'代表127.0.0.1::8000/admin地址信息,admin后面的斜杠是路径分隔符,admin.site。urls是URL的处理函数,也称为视图函数
        path('', include('index.urls'))   # URL为空,代表为网站的域名,即127.0.0.1:8000,通常是网站的首页;include将该URL分发给index的urls.py处理
    ]
    

    由于首页的地址分发给index的urls.py处理,因此下一步需对index的urls.py编写URL信息:

    # index的urls.py
    from django.urls import path
    from . import views
    urlpatterns = [
    	path('', views.index)
    ]
    

    上述代码导入了同一目录下的views.py,该文件用于编写视图函数,处理URL请求信息并返回网页内容给用户。因此,在views.py中编写index函数的处理过程:

    from django.shortcuts import render
    from django.http import HttpResponse
    # Create your views here.
    def index(request):
    	return HttpResponse("Hello World!")
    

    index函数必须设置参数request,该参数代表当前用户的请求对象,该对象包含用户名、请求内容和请求方式等信息,视图函数执行完成后必须使用return将处理结果返回,否则会抛出异常。

    带变量的URL

    • 字符类型str:匹配任何非空字符串,斜杠除外。若不指定类型则默认为该类型。
    • 整型int:匹配非负整数。
    • slug:可理解为注释、后缀或附属等概念,常作为URL的解释性字符。可匹配任何ACSII字符以及连接符和下划线,能使URL更加清晰易懂。比如网页标题是“13岁的孩子”,其URL地址可设为“13-sui-de-hai-zi”。
    • uuid:匹配一个uudi格式的对象。为防止冲突,规定必须使用破折号并且所有字母必须小写,如2134f-fd989-dajl5236。
      urls.py
    # index的urls.py
    from django.urls import path
    from . import views
    urlpatterns = [
    	path('', views.index),
    	path('<year>/<int:month>/<slug:day>', views.mydate)
    ]
    

    views.py

    from django.shortcuts import render
    from django.http import HttpResponse
    # Create your views here.
    def index(request):
    	return HttpResponse("Hello World!")
    
    def mydate(request, year, month, day):
    	return HttpResponse(str(year) + '/' + str(month) + '/' + str(day))
    

    在浏览器中输入http://127.0.0.1:8000/2019/12/24


    引入正则表达式规范日期格式:

    # index的urls.py
    from django.urls import path, re_path
    from . import views
    urlpatterns = [
    	path('', views.index),
    	#path('<year>/<int:month>/<slug:day>', views.mydate),
    	re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.mydate)
    ]
    

    在浏览器中输入http://127.0.0.1:8000/2019/12/24.html
    注意:如果URL末端使用正则表达式,应加上斜杠或其他字符,否则正则表达式无法生效。如上例若没有.html,则在浏览器中输入无限长的字符串也能正常访问。


    ##设置参数name Django还可对URL进行命名。在index中添加以下代码: urls.py ```python re_path('(?P[0-9]{4}).html', views.myyear, name='myyear') ``` views.py ```python def myyear(request, year): return render(request, 'myyear.html') ``` 在templates文件夹中添加myyear.html: ```html Title ``` 整个执行流程: 1. 用户访问URL时,程序根据URL选择视图函数myyear处理,并将该URL命名为myyear。 2. 视图函数myyear将模板myyear.html作为响应内容并生产网页返回。 3. 在模板myyear.html中设置两个a标签,都指向命名为myyear的URL地址。 4. 第二个a标签的href为{%url 'myyear' 2019 %},这是Django的模板语法,以{% %}表示。其中url 'myyear'是将命名为myyear的URL地址信息作为href属性值;2019是该URL的变量year,若URL没有设置变量值,则无需添加。

    上述例子可以看出,模板中的myyear与urls.py所设置的参数name是一一对应的。参数name的作用是对该URL地址信息进行命名,然后在HTML模板中使用可以生成相应的URL信息。


    采用第一张方法设置每个a标签的href属性值,若URL地址信息变更,就要修改每个a标签的href属性值。而设置参数name,只要参数name的值不变,无论URL地址信息如何改变都无需修改模板中a标签的href属性值。

    设置额外参数

    参数类型是以字典的数据类型传递的,且该参数只能在视图函数中读取和使用。

  • 相关阅读:
    程序员的基本修养之二
    jQuery学习之二
    面向对象程序的设计模式
    Mysql的复杂语句
    养成良好的做事风格
    前端模板学习bootstrap
    23. Merge k Sorted Lists
    953. Verifying an Alien Dictionary
    Daily Coding Problem: Problem #541
    396. Rotate Function
  • 原文地址:https://www.cnblogs.com/pengweii/p/12088500.html
Copyright © 2011-2022 走看看