django——视图层,模板层

网页伪静态

什么是伪静态?

伪静态页面是指动态网页通过重写URL的方法实现去掉动态网页的参数,但在实际的网页目录中并没有必要实现存在重写的页面。

作用:将动态网页伪装成静态网页 从而提升网页被搜索引擎收录的概率

表现形式就是网址看着像一个具体的文件路径

举例说明:

path('index.html', view.index)

视图层

视图函数的返回值

视图函数其实都必须返回一个HttpResponse对象

当浏览器向服务器发起数据请求的时候,那么服务器用来响应的视图函数的返回值的种类有两种,分别是HTML响应(HttpResponse、render、redirect)和JsonResponse(前后端分离)

其实HTML的三种响应方式返回的都是一个HttpResponse对象(可以查看源码)

注意:HttpResponse是一个类(可以查看源码)

  • HttpResponse
    不使用模板,直接HttpResponse()
    例如:创建一个视图函数

    def testResponse(request):
        response = HttpResponse()
        response.content = '加油'
        response.status_code = 404
        # 直接写出文本
        response.write('lzq')
        # 一次性读取剩余字节,冲刷缓存区
        response.flush()
        return response
    

效果图:

在这里插入图片描述

  • render
    render方法的返回值类型也是一个HttpResponse

    def testRender(request):
        response = render(request,'testRender.html')
        print(type(response))
        return response
    
    输出结果:<class 'django.http.response.HttpResponse'>
    
  • Redirect
    重定向
    其是HttpResponse的子类,响应重定向:可以实现服务器内部跳转

视图函数返回json格式数据

  • 方法一
    json序列化形式

    def index(request): 
        user_dict = {
         'name': 'jason', 'age': 123}
        data = json.dumps(user_dict)
    return HttpResponse(data)
    

    如果字典数据中存在中文字,输出的结果会进行编码,所以我们可以加参数ensure_ascii,这个参数默认情况下为Ture,我们让这个参数等于False即可

  • 方法二
    JsonResponse序列化形式

    def index(request):  # 视图函数返回json格式数据
        user_dict = {
         'name': 'jason', 'age': 123}
        return JsonResponse(user_dict)
    

    如果字典数据中存在中文字,输出的结果会进行编码,所以这里的处理方式需要我们看一看JsonResponse的源码:

    在这里插入图片描述

    我们可以看到,如果json_dumps_params如果为None的话,就是一个空字典;然后又根据关键字形参的知识我们可以加json_dumps_params={'ensure_ascii': False}

    补充

    JsonResponse这个类是HttpRespon的子类,它主要和父类的区别在于:
    1.它的默认Content-Type 被设置为: application/json
    2.第一个参数,data应该是一个字典类型,当 safe 这个参数被设置为:False ,那data可以填入任何能被转换为JSON格式的对象,比如list, tuple, set。 默认的safe 参数是 True. 如果你传入的data数据类型不是字典类型,那么它就会抛出 TypeError的异常。
    序列化非字典类型的数据还需要指定safe参数为False

接收文件数据

注意事项:

  • enctype属性需要由默认的urlencoded变成form/data(enctype="multipart/form-data")

  • method属性需要由默认的get变成post

    (目前还需要考虑的是 提交post请求需要将配置文件中的csrf中间件注释)

  • 如果form表单上传文件 后端需要在request.FILES获取文件数据 而不再是POST里面

举例说明:

views.py

def file(request):  # 文件数据的读取
    if request.method == 'POST':
        file_info = request.FILES.get('file')
        with open(file_info.name, 'wb') as f:
            for line in file_info:
                f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值