Django框架(之二)URL与视图
一、视图
- 视图一般都写在app的views.py中。并且视图的第一个参数永远都是request(一个HttpRequest)对象。这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等。在视图中,一般是完成逻辑相关的操作。
- views.py
- urls.py
二、URL映射和添加参数
- 可以在path函数中,使用尖括号的形式来定义一个参数,从而使一些参数可以做动态调整
- 结果
三、URL模板化和转换器
1.定义:URL中包含另外一个urls模块,在我们的项目中,不可能只有一个app,如果把所有的app的views中的视图都放在urls.py中进行映射,肯定会让代码显得非常乱。因此django给我们提供了一个方法,可以在app内部包含自己的url匹配规则,而在项目的urls.py中再统一包含这个app的urls。使用这个技术需要借助include函数。
- book.url
- 总URL
- 成果
- 转换器
from django.urls import converters
四、url命名与反转
- 原因
因为在项目开发的过程中URL地址可能经常变动,如果写死会经常去修改
path("",views.index,name="index")
- 应用命名空间
- 一个app,可以创建多个实例。可以使用多个URL映射同一个App。
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('cms1/', include("cms.urls",namespace='cms1')),
path('cms2/', include("cms.urls",namespace='cms2')),
path('front/', include("front.urls")),
]
- 实例命名空间
- 在做反转的时候,如果使用应用命名空间,就会发生混淆,为了避免这个问题,可以使用实例命名空间,实例命名空间使用,namespace=‘实例命名空间’
五、URL反转传递参数
- 如果这个url中需要传递参数,那么可以通过kwargs来传递参数。
reverse("book:detail",kwargs={"book_id":1}
- 因为django中的reverse反转url的时候不区分GET请求和POST请求,因此不能在反转的时候添加查询字符串的参数。如果想要添加查询字符串的参数,只能手动的添加。
login_url = reverse("front:singin") + "?name=jr"
return redirect(login_url)
六、指定默认参数
- 项目views
from django.http import HttpResponse
article_lists = ["a","b","c"]
def article(request):
return HttpResponse(article_lists[0])
def page(request,page_id=0):
return HttpResponse(article_lists[page_id])
- 总url
from django.urls import re_path,path
from . import views
urlpatterns = [
path("",views.article),
path("page/",views.page),
path("page/<int:page_id>",views.page),
]