返回当前日期和时间作为HTML文档的视图
from django.http import HttpResponse
import datetime
def current_time(request):
now = datetime.datetime.now()
html = 'It is now %s.
' % now
return HttpResponse(html)
django.http
模块导入了HttpResponse
类, 以及Python的datetime
库current_time
视图函数HttpRequest
对象作为第一位置参数, 一般取名为request
.HttpResponse
对象, 其中包含生成的HTML页面.首先在根URLconf中额外增加错误页面的条目
from django.contrib import admin
from django.urls import path
from app import views
...
# 增加的条目
handler400 = views.bad_request
handler403 = views.permission_denied
handler404 = views.page_not_found
handler500 = views.error
app/views.py
from django.shortcuts import render
from django.views.decorators.csrf import requires_csrf_token
@requires_csrf_token
def bad_request(request, exception):
return render(request, '400.html')
@requires_csrf_token
def permission_denied(request, exception):
return render(request, '403.html')
@requires_csrf_token
def page_not_found(request, exception):
return render(request, '404.html')
@requires_csrf_token
def error(request, exception):
return render(request, '500.html')
然后根据自己的需求, 创建对应的400,403,404,500四个页面.
只有当DEBUG设置为False时, 这些错误视图才会被自动执行
Django3.1开始支持异步视图函数
编写异步视图函数, 只需要用Python的async def
关键字语法
from django.http import HttpResponse
import datetime
async def current_time(request):
now = datetime.datetime.now()
html = 'It is now %s.
' % now
return HttpResponse(html)
render(request, template_name, context=None, content_type=None, status=None, using=None)
结合一个给定的模板给一个给定的上下文字典, 返回一个渲染后的HtppResponse对象
必要参数 :
可选参数
redirect(to, args, permanent=False, *kwargs)
根据传递进来的url参数, 返回HttpResponseRedirect
参数to可以是 :
示例 :
from django.shortcuts import redirect
def my_view(request):
obj = MyModel.objects.get(...)
return redirect(obj)
def my_view(request):
return redirect('index_name', foo='bar')
get_objects_or_404(klass, args, **kwargs)
查询某个对象, 找到了则进行下一步处理, 没找到则返回404
示例 :
from django.shortcuts import get_object_or_404
def my_view(request):
return get_object_or_404(MyModel, pk=1)
get_object_or_404(Book, title__startswith='M', pk=1)
返回一个给定模型管理器上filter()的结果, 并将结果映射为一个列表, 如果结果为空则弹出Http404异常
示例 :
从MyModel中获取所有发布出来的对象
from djang.shortcuts import get_list_or_404
def my_view(request):
my_objects = get_list_or_404(MyModel, published=True)
用于限制可以访问该视图的HTTP方法
from django.viewsdecorators.http import require_http_methods
@require_http_methods(["GET", "POST"])
def my_view(request):
....
用户上传的图片,文件等, 统称为MEDIA
为了方便在开发过程中, 对MEDIA资源的使用和测试, Django内置了一个serve()视图, 帮我们实现了通用的功能.
serve()视图只能用于开发环境
使用步骤 :
根路由urls
from django.conf import settings
from django.urls import re_path
from djang.views.static import serve
if setting.DEBUG:
urlpatterns += [
re_path(r'^media/(?P.*)$' , serve, {
'document_root': settings.MEDIA_ROOT,
}),
]
在settings中添加下面的配置
MEDIA_URL = '/media/'
MEDIA_ROOT = '/media/'
在Django项目的根目录下, 新建一个media文件夹, 将MEDIA资源放进去.