10 django jsonschema

Posted 栗子测试开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10 django jsonschema相关的知识,希望对你有一定的参考价值。

1 定义login schema

login_schema = {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "login",
    "type": "object",
    "properties": {
        "username": {"type": "string"},
        "password": {"type": "string"}
    },
    \'required\': [\'username\', \'password\']
}

 

2 自定义异常

def invalid_json():
    result = {
        \'code\': -1,
        \'msg\': \'Invalid JSON\'
    }
    return result

 

3 封装后端参数校验装饰器

import json
from jsonschema import ValidationError, validate
from django.http import JsonResponse
from common.my_exception import invalid_json

def json_validate(schema):
    def valieated_func(func):
        def _func(self, request, *args, **kwargs):
            try:
                validate(json.loads(request.body), schema)
            except ValidationError as e:
                return JsonResponse(invalid_json(), safe=False)
            else:
                return func(self, request, *args, **kwargs)
        return _func
    return valieated_func

 

4 对登录参数进行校验

class Login(View):
    @json_validate(login_schema)
    def post(self, request):
        json_obj = json.loads(request.body)  # 转字典
        try:
            username = json_obj[\'username\']
            password = json_obj[\'password\']
        except Exception as e:
            result = {\'code\': -1, \'msg\': u\'用户名或密码为空!\'}
            return JsonResponse(result)

        users = User.objects.filter(username=username)  # 返回数组
        if users is None:
            result = {\'code\': -1, \'msg\': u\'用户名或密码错误!\'}
            return JsonResponse(result)
        user = users[0]
        m = hashlib.md5()
        m.update(password.encode())
        # 密码比对
        if m.hexdigest() != user.password:
            result = {\'code\': -1, \'msg\': u\'用户名或密码错误!\'}
            return JsonResponse(result)

        # 生成 token
        token = make_token(username)
        # encode的作用是将unicode编码的字符串编码成二进制数据
        # decode的作用是将二进制数据解码成unicode编码
        result = {\'code\': 1, \'data\': {\'token\': token}, \'msg\': u\'登录成功!\'}
        return JsonResponse(result)

 

以上是关于10 django jsonschema的主要内容,如果未能解决你的问题,请参考以下文章

如何配置 VS Code 以启用 .json 文件的代码完成(jsonschema 支持)?

如何在 Django Summernote 中显示编程片段的代码块?

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

难以对齐 JSONschema 和 XSD 等效项

jsonschema2pojo maven插件不会生成Java类