Django基础Django入门
Posted Ricky_0528
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django基础Django入门相关的知识,希望对你有一定的参考价值。
文章目录
6. 从文件响应html内容
6.1 原理
- 从磁盘读取HTML文件
- 替换HTML中的特殊字符
- 发送给浏览器
6.2 render_to_string()函数
render_to_string(template_name, context=None, request=None, using=None)
-
template_name:模板名称
-
context:请求对象
-
request:模板上下文对象(dict)
-
using:模板引擎名称(如:Jinja2)
需要先在settings.py中进行配置,其中
- BACKEND:模板引擎
- DIRS:去哪里找HTML文件,配置为’DIRS’: [‘templates’]
- APP_DIRS:是否会去自己新建的模块下寻找HTML文件
在templates文件夹下存放模板
视图函数:
def render_str(request):
templ_name = 'index.html';
html = render_to_string(template_name=templ_name)
return HttpResponse(html)
6.3 render函数
render(request, template_name, context=None, content_type=None, status=None, using=None)
- request:请求对象
- template_name:模板名称
- context:模板上下文对象(dict)
- content_type:MIME类型,默认为text/html
- status:HTTP状态码
- using:模板引擎名称(如:Jinja2)
视图函数:
def render_html(request):
return render(request, 'index.html')
在当前模块下新建一个templates文件夹,可以将该模块对应的HTML文件存放在该文件夹当中,但需要现在settings.py文件当中进行配置
- TEMPLATES -> ‘APP_DIRS’: True -> INSTALLED_APPS追加上该模块名
模板寻找的顺序:
根路径下的templates -> 已安装的模块中 -> 自己新建且已经配置到settings.py的模块
7. 请求响应对象
7.1 从请求到响应的过程
7.2 请求对象HttpRequest
- 请求方式method(POST/GET/…)
- 请求头信息META/headers(headers的内容要比META里的精简很多)
- REMOTE_ADDR:请求的IP地址
- HTTP_USER_AGENT:用户请求终端信息
- 获取请求传递参数
- GET:GET请求参数
- POST:POST请求参数
- COOKIES:cookie信息
- FILES:文件信息
def http_request(request):
# 请求方式
print(request.method)
# 请求头信息
print(request.META)
ua = request.META.get('HTTP_USER_AGENT', None)
print(ua)
print(request.headers)
print(request.headers['User-Agent'])
print(request.headers['user-sgent']) # 不区分大小写
# 获取请求参数
print(request.GET.get('name', ''))
return HttpResponse('响应')
7.3 响应对象
- HttpResponse
- HttpResponseRedirect——重定向
- JsonResponse——响应json
- FileResponse——响应文件
响应对象之间的关系(上面是父类,下面是子类)
7.4 HttpResponse
- status设置HTTP响应状态码
- status_code查看HTTP响应状态码
- content_type设置响应的类型
- write()写入响应内容
def http_response(request):
resp = HttpResponse('响应内容', status=201)
resp.status_code = 204
print(resp.status_code)
return resp
常见的Content-Type
- text/html:超文本标记语言文本(HTML)
- text/plain:普通文本
- text/xml:XML文档
- image/png、image/jpeg、image/gif:图片或图形
- application/json:json数据类型
7.5 JsonResponse
def http_response(request):
user_info =
'name': 'Ricky',
'age': 34
return JsonResponse(user_info)
7.6 FileResponse
def http_response(request):
img_resp = open('D:/QQ文件/2946677871/FileRecv/MobileFile/bc.png', 'rb')
return FileResponse(img_resp)
8. 视图快捷方法
8.1 重定向
重定向之前:
重定向之后:
8.2 使用HttpResponseRedirect重定向
视图函数:
def no_data_404(request):
return HttpResponse('404')
def article_detail(request, article_id):
"""
文章详情,ID是从100开始的整数
:param article_id: 文章ID
"""
if article_id < 100:
# return HttpResponseRedirect('/hello/404/')
return HttpResponseRedirect(reverse('no_data_404'))
return HttpResponse(f'文章article_id的内容')
如果使用注释了的方法,要注意HttpResponseRedirect
后的URL地址最左侧的 / 不能丢
8.3 使用redirect()重定向
这个直接传视图函数的名称就可以了,同样写地址也可以
def article_detail(request, article_id):
"""
文章详情,ID是从100开始的整数
:param article_id: 文章ID
"""
if article_id < 100:
# return redirect('/hello/404/')
return redirect('no_data_404')
return HttpResponse(f'文章article_id的内容')
9. 内置的视图及重写
9.1 内置的错误处理视图
- 400 Bad Request
- 403 Forbidden
- 404 Not Found
- 500 Internal Server Error
内置的错误处理视图只有单一的文字,并不好看,要给用户一个更好的展现需要我们重写内置的错误处理视图
9.2 重写内置的错误处理视图
-
在urls.py中添加配置
- handler500 = “my_project.views.page_500”
- handler400
- handler403
- handler404
-
在settings.py中切换到生产模式:DEBUG=False
urls.py
handler500 = 'w19_Django_base.views.page_500'
w19_Django_base.views.py
from django.http import HttpResponse
def page_500(request):
return HttpResponse('服务器正忙,请稍后重试!')
9.3 static.serve处理静态文件
可以直接看到项目下的一些图片等静态文件
-
在项目下单独创建一个static/medias文件夹用来存放静态文件
-
在项目settings.py中添加配置
MEDIA_URL = '/media/' # 跟文件上传有关的配置 MEDIA_ROOT = os.path.join(BASE_DIR, 'medias')
-
在项目urls.py中添加配置
if settings.DEBUG: urlpatterns += [ re_path(r'^media/(?P<path>.*)$', serve, 'document_root': settings.MEDIA_ROOT, ), ]
访问http://192.168.1.5:9527/media/bc.png
就可以访问到图片bc.png
10. 使用class重写视图
10.1 基于类的视图
- 视图是一个可调用的对象,可以接受一个请求然后返回一个响应
- 基于类的视图可以结构化你的视图
- 基于类的视图可以利用继承和混合重用代码
- 内置的视图拿来即用,代码简洁
10.2 举例:TemplateView
-
继承视图
django.views.generic.TemplateView
-
配置模板地址
-
配置URL
视图函数:
class HomeView(TemplateView):
template_name = 'home.html'
urls.py
urlpatterns = [
path('home', HomeView.as_view(), name='home')
]
10.3 TemplateView原理解析
- 从项目的主目录寻找模板文件
- 从app的模板目录寻找模板文件
10.4 内置通用视图
django.views.generic.ListView
- 是列表类数据的封装
- 可以配置模板地址
- 支持分页
django.views.generic.DetailView
- 是详情类数据的封装
10.5 类视图的本质
Python的多继承:class ListView(MultipleObjectTemplateResponseMixin, BaseListView)
以上是关于Django基础Django入门的主要内容,如果未能解决你的问题,请参考以下文章