1102.url路由及模版渲染方式

lxinghua / 2023-05-03 / 原文

一、url基本概念及格式

1. URL概念

URL(Uniform Resoure Locator)统一资源定位符是对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。

2. URL格式

http://127.0.0.1:8000/hello/

URL解释:

schema://host[:port#]/oath/.../[?query-string][#anchor]

schema:指定使用的协议(例如:http,https,ftp)

host:Http服务器的IP地址或者域名

port:端口号,http默认是80端口

path:访问资源的路径

query-string:发送给http服务器的数据

anchor:锚点#

3. urls.py作用

URL配置(URLconf)就像是Django所支撑网站的目录。它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表。以这样的方式告诉Django,对于那个URL调用那段代码。url的加载就是从配置文件中开始。

4. url例子

项目目录下url.py文件

项目目录下创建的views.py文件

5. url分析

只有访问的url(127.0.0.1:8000/hello/)跟后台配置的url一致时,才会调用url对应的视图函数(下图中1~4编号项目)。

二、path和re_path

1. path基本规则

path('test/<xx>/', views.test)      使用尖括号(<>)从url中捕获值。包含一个转化器类型(converter type)没有转化器,将匹配任何字符串,当然也包括了/字符;当前面的url匹配成功后,就会调用后面的视图函数。

默认支持的转换器:

str:匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式;

int:匹配正整数,包含0;

slug:匹配字母、数字以及横杠、下划线组成的字符串;

uuid:匹配格式化的uuid,如075194d8-6886-417c-r8r8-6a931w272g00;

path:匹配任何非空字符串,包含了路径分隔符;

转换器的使用:

①设置url:   path('test/<int:xx>/', views.test3)

②在视图中将获取到的参数和参数的类型打印出来:红色字符参数名需要一致。

def test3(request, xx):
    print(xx, type(xx))
    return HttpResponse('Hello %s'%xx)

2. re_path正则匹配

    re_path('^hello/$',views.test5),

    re_path('^hello/(?P<yy>[0-9]+)/',views.test6),
def test5(request):
    return HttpResponse('这是用的re_path设置的')

def test6(request,yy):
    print(yy,type(yy))
    return HttpResponse('hello %s'%yy)

3. include使用方式

include的作用:一个project有一个总的urls.py,各个app也可以自己建立自己的urls.py,用include()函数在project的urls.py文件进行注册

项目urls.py文件

from django.contrib import admin
from django.urls import path,include
from . import views
urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/',include('book.urls')),
]

app urls.py文件

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

app views.py文件

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
    return HttpResponse('这个book的首页!!')

4. kwarge的作用

传递一个Python字典作为额外的参数传递给视图函数。

 

# 主urls.py文件
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
    path('admin/', admin.site.urls),
    path('book/',include('book.urls'),{'switch':'true'}),
]
# APP books里面的views.py
from django.http import HttpResponse
import datetime
def index(request,**kwargs):
    if kwargs.get('switch') == 'true':
        print(datetime.datetime.now())
    return HttpResponse('这个book的首页!!')

5. name的作用

作用:name参数可以给这个url取一个合适的名字。通过给url取名字,以后在view或者模板中使用这个URL,就只需要通过这个名字就可以了。这样做的原因是防止url的规则更改,会导致其他地方用了这个url的地方都需要更改,但是如果去名字了,就不要做任何改动了。

给一个匹配的url地址取名字,一般用于模版,也可以使用reverse进行页面重定向

案例:

三、模版路径配置

 1. 在主目录下创建一个templates目录用来存放所有的html的模板文件;

2. templates目录里面在新建各个以app名字命名的目录来存放各个app中模板文件

3. 同时需要将templates添加到settings.py文件TEMPLATES的DIRS中

四、模版渲染方式

1. 直接将html字符串硬编码HttpResponse中

2. django.templates.loader定义了函数以加载模版

3. 使用render进行渲染

render方式django封装好用来渲染模版的方式,很方便好用!!!