【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)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ricky_0528

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值