视图
视图一般都写在app的views.py中。并且视图的第一个参数永远都是request(一个HttpRequest)对象。这个对象存储了请求过来的所有信息,包括携带的参数以及一些头部信息等。在视图中,一般是完成逻辑相关的操作。比如这个请求是添加一篇博客,那么可以通过request来接收到这些数据,然后存储到数据库中,最后再把执行的结果返回给浏览器。视图函数的返回结果必须是HttpResponseBase对象或者子类的对象。
1. url的映射
先进入项目文件夹创建app book
代码如下
(Django框架-M7PXHVMJ) E:\Django框架>md day2
(Django框架-M7PXHVMJ) E:\Django框架>cd day2
(Django框架-M7PXHVMJ) E:\Django框架\day2>django-admin startproject django_url
(Django框架-M7PXHVMJ) E:\Django框架\day2>cd django_url
(Django框架-M7PXHVMJ) E:\Django框架\day2\django_url>python manage.py startapp book
(Django框架-M7PXHVMJ) E:\Django框架\day2\django_url>
pycharm显示如下:
定义视图参数的2种方式
首先导入在views.py中导入包
from django.http import HttpResponse
方法1
def book(request, book_id):
return HttpResponse('图书第%s本' % book_id)
在url.py中导入包
from book import views
urlpatterns = [
path('admin/', admin.site.urls),
path('book/<book_id>', views.book),]
浏览器输入 http://127.0.0.1:8000/book/2 ,显示如下:
方法2
在views.py中输入下面代码:
def book_detail(request):
book_detail = request.GET.get('book_detail')
return HttpResponse('图书第%s页' % book_detail)
在url.py中输入下面代码:
urlpatterns = [
path('admin/', admin.site.urls),
path('book_detail/', views.book_detail),]
在浏览器中输入: http://127.0.0.1:8000/book_detail/?book_detail=2
由于接受的参数不一样,访问的方法也就不一样。
2.url的模块化分层管理
当项目中有很多app 为了便于管理在相应的app中创建urls.py文件,实现url的分层管理,具体的步骤如下
1,在对应的app中创建urls.py文件
2,在项目文件下总的urls.py中导入include包
代码:
from django.urls import path, include
url分层管理
urlpatterns = [
path('admin/', admin.site.urls),
path('book/', include('book.urls')),
3, 在app中新建的urls.py重新url路径。
先导入path和views包,如2中截图
代码:
from django.urls import path
from . import views
from django.urls import converters
urlpatterns = [
path('<int: book_id>', views.book),
path('book_detail/', views.book_detail),]
4,浏览器访问输入地址:
http://127.0.0.1:8000/book/book_detail/?book_detail=2
<meta name="source" content="lake">
Django内置转换器
内置转换器的用途是对参数进行约束。
from django.urls import converters
(https://www.cnblogs.com/franknihao/p/7307224.html)
3. url命名与反转
1,为何需要url命名
2,如何给一个url指定名称
3,应用命名空间
操作如下
a 现在项目中创建2个app 分别为front 和 cms
b 在front cms 中分别创建url.py文件
c 在主项目url.py中创建路由
d 在2个app中分别创建2个函数,给点逻辑name if语句将域名重定向至login函数
e 在对应的urls.py中创建路径
f 在不同app中相同函数名称区分开来用app_name = 'app名称',应用命名空间将不同app做个和隔离箱防止访问发生错乱。
g 在浏览器中输入地址
http://127.0.0.1:8000/cms/sign/
http://127.0.0.1:8000/front/login/
注意:name = login app_name= 'app'防止浏览器访问错乱 若不用将访问错误.
反转传递参数
reverse函数应用
1,现在cms views.py中创建新的函数
2,在cms url.py中创建路由
3,在views.py中重定向函数中反转
4,启动manage.py 在浏览器中输入
http://127.0.0.1:8000/cms/news/1
通过?拼接方式
代码如下
启动manage.py 在浏览器输入地址:
http://127.0.0.1:8000/cms/sign/?name=chenn
指定默认参数
1,在cms.views.py中创建article函数 默认参数page=1
2,在cms.urls.py中创建路由
3,启动manage.py 在浏览器中输入地址
http://127.0.0.1:8000/cms/article/
http://127.0.0.1:8000/cms/article/3
re_path() 路由的正则匹配
1,现在views.py创建函数
2,然后在urls.py中添加正则匹配的规则
r''表示字符串的原本的意思 ()给分组 (?P<year>\d{4}) 给分组取名然后写匹配规则 $ 表示结束匹配 限制字数
re_path(r'current_year/(?P<year>\d{4}$)', views.current_year)
3,启动manage.py 在浏览器中输入地址
http://127.0.0.1:8000/book/current_year/2020