zoukankan      html  css  js  c++  java
  • 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匹配模式有重复的别名
  • 相关阅读:
    echarts设置y轴线的样式
    echarts基础配置信息?
    提高网站用户体验使网站更好发展的五大要点
    没有或很少有出站链接的网站存在致命的缺陷
    网络推广之百度知道推广技巧
    如何让百度3分钟内收录你的文章
    CSS强制换行
    如何提高网站在搜索引擎中的权重
    js闭包深入详解
    深入浅出之正则表达式
  • 原文地址:https://www.cnblogs.com/anyux/p/11922039.html
Copyright © 2011-2022 走看看