Django视图定义,URL映射
2020-03-25 本文已影响0人
达闻西_
视图
一般写在app的views.py中,并且视图的第一参数永远都是request(一个HttpRequest对象),这个对象存储了请求过来的所有信息,包括携带的参数,以及一些头部信息。在视图中一般是完成逻辑相关的操作,比如请求添加一篇博客,那么可以通过request来接收这些数据,然后存储到数据库中,最后把执行结果返回给浏览器,返回必须是httpResponseBase对象或者子类的对象
from django.http import HttpResponse
def book_list(request):
return HttpResponse("书籍列表")
# urls.py
path('book/', views.book_list)
视图函数
- 第一个参数必须是request,不能少
- 返回值必须是django.http.response.httpResponseBase的子类的对象
URL映射
- 为什么会去urls.py中寻找映射呢?
- 是因为在settings.py中配置了ROOT_URLCONF为urls.py,所以django会去urls.py中寻找
- 在urls.py中所有映射,都应该在urlpatterns这个变量中
- 所有映射不是随便写,而是使用path函数或者re_path函数进行包装的
# URL中添加参数
from book import views
def index(request):
return HttpResponse("图书首页")
path('', index) # 首页
path('book/<book_id>', vies.book_detail)
path('book', views.book)
python manage.py startapp book
# views.py
from django.http import HttpResponse
def book(request):
return HttpResponse("图书首页")
def book_detail(request, book_id):
# 可以从数据库中提取book_id这个图书的信息
text = "您图书的id是 %s" % book_id
return HttpResponse(text)
URL传参数
-
采用在url中使用变量的方式,在path的第一个参数中,使用<参数名>的方式可以传递参数,然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找不到这个参数,另外,url可以传递多个参数。
-
采用查询字符串的形式,不需要单独匹配查询字符串部分,只要在视图函数中使用request.GET.get方法
path('book/author/', views.author_detail)
def author_detail(request):
author_id = request.GET.get('id')
text = "作者的id是: %s" % author_id
return HttpResponse(text)
127.0.0.1:8000/book/author/?id=1
因为查询字符串使用的是GET请求,所以我们通过request.GET来获取参数,并且因为GET是一个类似于字典的数据类型,所以取值和字典的方式一样