django FBV&&CBV upload-file json 路由系统 反向解析

FBV与CBV

参考网址

https://www.cnblogs.com/liwenzhou/articles/8305104.html#autoid-1-1-0

request对象

参考网址

https://www.cnblogs.com/liwenzhou/articles/8305104.html#autoid-2-0-2

上传文件示例

def upload(request):
    """
    保存上传文件前,数据需要存放在某个位置。默认当上传文件小于2.5M时,django会将上传文件的全部内容读进内存。从内存读取一次,写磁盘一次。
    但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。
    :param request: 
    :return: 
    """
    if request.method == "POST":
        # 从请求的FILES中获取上传文件的文件名,file为页面上type=files类型input的name属性值
        filename = request.FILES["file"].name
        # 在项目目录下新建一个文件
        with open(filename, "wb") as f:
            # 从上传的文件对象中一点一点读
            for chunk in request.FILES["file"].chunks():
                # 写入本地文件
                f.write(chunk)
        return HttpResponse("上传OK")

#上传文件示例代码

django输出json格式

view.py,视图

def json(request):
    from django.http import JsonResponse
    from json import dumps
    data = {
        '素还真' : "半神半圣亦半仙",
        '一叶书' : "笑尽英雄",
        '叶小钗' : "啊",
    }

    data_str = dumps(data,ensure_ascii=False,sort_keys=True, indent=4, separators=(',', ':'))
    return  HttpResponse(data_str,content_type="application/json")
    # return  HttpResponse(data_str,)

    # return JsonResponse(data)

django 上传文件

def upload(request):
    if request.method == "POST":
        # 获取文件名称
        filename =request.FILES['filename'].name
        print(filename)
        # 获取文件上传集合
        print(request.FILES)
        # 取上传的单个文件进行写入操作
        with open(filename, "wb") as f:
            # 以每个chunks为单元写入磁盘
            for i in request.FILES['filename'].chunks():
                f.write(i)
        #         返回响应值
        return HttpResponse("上传OK")
        # return HttpResponse("ok")
    else:
        return render(request,'user/upload.html')

路由系统

http://www.cnblogs.com/liwenzhou/p/8271147.html

  1. 正则表达式的模糊匹配
  2. 分组匹配 --> 相当于给视图函数传递位置参数
  3. 分组命名匹配 --> 相当于给视图函数传递关键字参数
    (两个不要混合使用)

反向解析URL

本质上就是给url匹配模式起别名,然后用过别名拿到具体的URL路径

  1. 怎么起别名?
    在url匹配模式中,定义name="别名"
  2. 如何使用?
    1. 在模板语言里面使用:
      {% url "别名" %} --> 得到具体的URL路径

    2. 在视图中如何使用:
      from django.urls import reverse

      reverse("别名") --> 得到具体的URL路径

  3. 如何传参数?
    1. 模板语言中:
      {% url "别名" 2018 "nb" %}

    2. 视图函数中
      传位置参数:
      reverse("别名", args=(2018, "nb"))

      传关键字参数:
      reverse("别名" kwargs={"year": 2018, "title": "nb"})

  4. namespace
    为了防止不同的app下面的url匹配模式有重复的别名