1 视图:一般写在app的views.py中。并且视图的第一个参数永远都是request(一个HttpRequest)对象。视图函数的返回结果必须是HttpResponseBase对象或者子类的对象。
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def book(request):
return HttpResponse('图书首页')
2 URL映射:用户输入某个url,请求到我们网站的时候,django会从项目的urls.py文件中寻找对应的视图。
from django.contrib import admin
from django.urls import path
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
path('book/', views.book)
]
3 URL中添加参数:可以在path函数中,使用尖括号的形式来定义一个参数。
views.py
def book_detail(request,book_id,category_id):
text = '您获取的图书id是%s,图书分类是%s'%(book_id, category_id)
return HttpResponse(text)
urls.py
path('book/detail/<book_id>/<category_id>', views.book_detail),
采用查询字符串的方式:在url中,不需要单独匹配查询字符串部分。只需要在视图函数中使用‘request.GET.get(‘参数名称’)’的方式。
def author_detail(request):
author_id = request.GET.get('id')
text = '作者的id是%s'%author_id
return HttpResponse(text)
http://127.0.0.1:8000/book/author/?id=1
4 url命名与反转url
—为什么需要url命名?—
因为url是经常变化的。如果在代码中写死可能会经常改代码。给url取个名字,以后使用url的时候就使用他的名字进行反转就可以了,就不需要写死url了。
—如何给一个url指定名称?—
在‘path’函数中,传递一个‘name’参数就可以指定。
urlpatterns = [
path('', views.index,name = 'index'),
path('login/', views.login,name ='login')
]
—应用命名空间—
在多个app之间有可能产生同名的url。这时候为了避免反转url的时候产生混淆,可以使用应用命名空间来做区分
urls.py
app_name = 'front'
views.py
return redirect(reverse('front:login'))