视图一般都写在 app的 views.py中。并且视图的第一个参数永远都是request (一个HttpRequest)对象。这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等。
from django.http import HttpResponse
def book(request):
return HttpResponse("书籍列表!")
def book_detail(request,book_id,category_id): #获取url传递的参数
text = "您输入的书籍的id是:%s,图书分类:%s" % (book_id,category_id)
return HttpResponse(text)
def author_detail(request): #通过字符串查询方式获取参数
author_id=request.GET.get("id")
text='你的作者是:%s'% (author_id)
return HttpResponse(text)
在用户输入了某个 url,请求到我们的网站的时候,django会从项目的 urls.py文件中寻找对应的视图。在urls.py文件中有一个urlpatterns变量,以后 django 就会从这个变量中读取所有的匹配规则。匹配规则需要使用 django.urls.path 函数进行包裹,这个函数会根据传入的参数返回URLPattern 或者是 URLResolver的对象。
from django.contrib import admin
from django.urls import path
from book import views
urlpatterns = [
path('admin/', admin.site.urls), #django默认的url映射
path('book/', views.book), #URL映射
path('book///' ,views.book_detail),#在URL中添加传递参数
path('book/author/',views.author_detail)#通过查询字符串的方式传递一个参数
]
在我们的项目中,不可能只有一个 app,如果把所有的 app的views 中的视图都放在urls.py中进行映射,肯定会让代码显得非常乱。因此django给我们提供了一个方法,可以在 app 内部包含自己的 url 匹配规则,而在项目的 urls.py中再统一包含这个app的 urls。使用这个技术需要借助 include函数。
#主urls文件
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('front.urls')), #导入到app的urls
path('cms/',include('cms.urls'))
]
------------------------------------------------------
#front/urls文件
from django.urls import path
from . import views
app_name='front' #指定应用命名空间
urlpatterns=[
path('',views.index,name='index'),
path('login/',views.login,name='login')
]
----------------------------------------------------
#cms/urls文件
from django.urls import path
from . import views
aap_name='cms'
urlpatterns=[
path('',views.index,name='index'),
path('login/',views.login,name='login')
]
之前我们都是通过url来访问视图函数。有时候我们知道这个视图函数,但是想反转回他的url。这时候就可以通过 reverse 来实现。
#front/views文件
from django.http import HttpResponse
from django.shortcuts import redirect,reverse
def index(request):
username = request.GET.get('username')
if username: #获取参数进行判断
return HttpResponse('前台首页')
else:
return redirect(reverse('front:login')) #进行url反转
def login(request):
return HttpResponse('前台登陆页面')
---------------------------------
#front/urls文件
rom django.urls import path
from . import views
app_name='front'
urlpatterns=[
path('',views.index,name='index'),
path('login/',views.login,name='login')
]
“`