开发流程的学习,用于快速熟悉Django框架各个模块
一、路由
在Django中,定义一个路由配置需要包括正则表达式、视图两部分
Django使用正则表达式匹配请求的URL
一旦匹配成功,则调用应用的视图
如果在正则表达式中有正则分组,则会将正则分组匹配内容作为实参传递给视图函数
注意:只匹配路径部分,即除去域名、端口后的字符串
path('admin/', admin.site.urls)
admin为django自带后台管理路由
1,path 通常绑定应用路由列表
from django.urls import path,include
# 使用path将booktest的路由 进行包含
path('booktest/', include('booktest.urls'))
注意:此处需要在booktest应用下手动创建urls
并且在urls中必须使用 urlpatterns 声明应用路由数组
2,url 通常绑定应用中具体路由
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^index/$',views.index),
]
一个project中如果有多个应用,为避免url管理可能的混乱,在项目的urls.py用include方法包含应用中的urls
二、视图
Django中编写视图可以使用视图函数(FBV)与视图类(CBV)两种方式
在开发流程中我们仅介绍基于函数的视图,后面课程中会介绍基于类的视图
在应用的view.py中可以编写应用中路由绑定的视图
视图接收reqeust对象作为第一个参数,包含了请求的信息
request参数必不可少
其他参数可根据需求添加(如果视图所绑定的路由中有正则分组,则需要为该分组提供形参)
from django.shortcuts import render
from .models import Book
def index(request):
books = Book.objects.all()
# 在渲染模板的时候传递 books参数 在模板中可以解析books
return render(request,'index.html',{"books":books})
render函数介绍:
render函数内部封装了加载模板文件的流程
实现原理
# 1获取模板
template = loader.get_template('index.html')
# 2渲染模板数据
books = Book.objects.all()
context = {"books": books}
result = template.render(context)
# 3将渲染结果使用httpresponse返回
return HttpResponse(result)
三、带参数路由与视图
在应用路由中使用正则分组为视图函数提供实参
在应用的urls.py中编写
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'detail/(\d+)/',views.detail),
# 如果正则分组使用了别名,形参一定要是bid
# url(r'detail/(?P<bid>\d+)/',views.detail),
]
在应用的views.py中编写
from django.shortcuts import render
from .models import Book
def detail(request,bookid):
# 如果正则分组使用了别名,形参一定要是bid
# def detail(request,bookid):
book = Book.objects.get(id=bookid)
return render(request,'detail.html',{"book":book})