• 杂记:Django和static,Nginx配置路径,json_schema


    前记:知识无处不在,要懂得珍惜,找到适合自己的方法高效地学习有价值的知识,不念过去,不畏将来。

    Django对待静态资源,在非前后端分离时的常识

    Django会对项目app下的static文件夹的静态资源进行收集,同名则按优先级指向,要自己加资源可以在settings.py的STATICFILES_DIRS进行额外指定,STATIC_URL=‘/static/',会对外监听例如:127.0.0.1:8000/static/*,STATIC_ROOT = os.path.join(BASE_DIR,'all_static')用于项目生产部署,在项目的开发过程中作用不大,平时都是前后端分离的,对生产环境的STATIC_ROOT没有感知,还不如好好学一下vue。

    在云服务器部署项目时,Nginx正向代理

    代理静态资源时,如果是build完的文件夹放服务器要注意位置,绝对路径或正确的相对路径,相对路径是基于nginx.conf进行相对的,include的配置文件别搞错了,还是绝对路径稳,然后要注意Windows和Centos7的文件资源路径为和/的区别。

    关于Django的Form校验json格式

    在上传购物车之类的复杂数据时,可用json进行包装,Form对json进行校验,使用json_schema,之前都是根据检验目标自己写json_schema,后来发现可以在线生成的。例如:https://jsonschema.net/

    class FormAddOrder(forms.Form):  # 新增订单校验json
        json_data_str = forms.CharField(max_length=1024)
    
        def clean(self):  # 重写clean,可以覆盖jaon_data_str,这里没覆盖
            cleaned_data = self.cleaned_data
            json_data = json.loads(cleaned_data["json_data_str"])
            json_schema = {
                "type": "object",
                "required": ["type", "client", "warehouse", "send_way", "count_type", "real_price",
                             "need_price", "orders"],
                "properties": {
                    "type": {"type": "string"},
                    "client": {"type": "integer"},
                    "warehouse": {"type": "integer"},
                    # "cabinets": {"type": "string"},
                    "send_way": {"type": "string"},
                    "count_type": {"type": "string"},
                    "real_price": {"type": "number"},
                    "need_price": {"type": "number"},
                    "orders": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "required": ["num", "need_price", "new_need_price", "batch", "goods"],
                            "properties": {
                                "num": {"type": "integer"},
                                "need_price": {"type": "number"},
                                "new_need_price": {"type": "number"},
                                "batch": {"type": "string"},
                                "goods": {"type": "integer"},
                            }
                        }
                    },
                }
            }
            try:
                validate(json_data, json_schema)
            except Exception as e:
                raise forms.ValidationError(e)
            return cleaned_data
    
    

    校验对象:

    {
    	"type": "销售订单",
    	"client": 11,
    	"warehouse": 1,
    	"cabinets": "aa564879564",
    	"send_way": "快递",
    	"count_type": "现结付清",
    	"real_price": 3000,
    	"need_price": 3888,
    	"orders": [{
    		"num": 100,
    		"need_price": 110,
    		"new_need_price": 100,
    		"batch": "2019888",
    		"goods": 1
    	}, {
    		"num": 200,
    		"need_price": 220,
    		"new_need_price": 200,
    		"batch": "2019888",
    		"goods": 1
    	}]
    }
    
  • 相关阅读:
    Unix进程和线程管理及其异同
    UnixIPC之共享内存
    Unix/Linux常用文件操作
    java中int和Integer比较
    JAVA四种引用类型
    JAVA-Exception&Error
    JAVA特性-跨平台/面向对象
    JAVA单向链表实现
    linux安装及配置c++的opencv库
    static_cast、const_cast、dynamic_cast、reinterpret_cast
  • 原文地址:https://www.cnblogs.com/bqwzx/p/10687089.html
Copyright © 2020-2023  润新知