实现方式:加装器
def outer(func): ''' 只能用来装饰视图函数 :param func: :return: ''' def inner(request, *args, **kwargs): # args[0].POST=json.loads(args[0].body) # 是为了防止报错,主要是处理urlencode这种编码,这种编码应该不处理 try: # name=lqz&pwd=123 request.POST = json.loads(request.body) except Exception as e: print(e) ret = func(request, *args, **kwargs) return ret return inner @outer def login(request): if request.method == 'GET': return render(request, 'login.html') if request.is_ajax(): print(request.body) print(request.POST) # loads可以直接传二进制 # request_dic=json.loads(request.body) # request.POST=request_dic # print(type(request_dic)) name = request.POST.get('name') pwd = request.POST.get('pwd') print(name) print(pwd) return HttpResponse('ok')
实现简单的数据登陆验证:
def outer(func): """ 只能处理前端传来数据的格式的装饰器 :param func: :return: """ def inter(*args,**kwargs): #func的参数会自动按相关属性传到*args,**kwargs print(args[0].body) try: #处理前端contentType:"appliction/json",格式的数据 args[0].POST=json.loads(args[0].body) except Exception as e: print(e) res = func(*args, **kwargs) return res return inter @outer def haha(request): if request.method == "GET": return render(request, "login.html") else: data = {"signal": 100} msg = models.User.objects.all() user = request.POST.get("user") pwd = request.POST.get("pwd") for into in msg: if user == into.name and int(pwd) == into.pwd: data["msg"] = "登陆成功" print(data) return JsonResponse(data) data["msg"] = "用户名或密码错误" print(data) return JsonResponse(data)
前端代码(ajax):
<p>用户名:<input type="text" id="user"></p>
<p>密码:<input type="password" id="pwd"></p>
<p><input type="button" id="button" value="提交"></p>
$("#button").click(function () {
var user = $("#user").val()
var pwd = $("#pwd").val()
dic = {"user":user,"pwd":pwd}
$.ajax({
url:"login3",
type:"post",
contentType:"appliction/json",
data: JSON.stringify(dic),
{#data: "123",#}
success:function (data) {
console.log(typeof data)
data = JSON.parse(data)
console.log(typeof data)
if(data.signal==100){
$("#text").text(data.msg)
}else{
$("#text").text(data.msg)
}
}
})
})