Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
前一篇使用 Django 自带的 form 表单直接渲染到前端生成注册表单,而且对注册表单里的字段进行了再次验证判断,重写 clean 方法 is_valid。
在使用 ajax 进行请求注册前,需要定义数据格式,通过 json 进行数据通信。而对于不同请求返回后的参数不同,需要单独定义请求时,需要返回的数据格式。
from django.http import JsonResponse
class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None,**kwargs)
① 定义请求返回数据
不管是 POST 请求,还是 GET 请求,通过 ajax 返回的都需要是 json 数据格式。
200 成功处理了请求
400 服务器不理解请求的语法
401 请求要求身份验证
405 禁用请求中指定的方法
500 (服务器内部错误) 服务器遇到错误,无法完成请求
class HttpCode(object):
ok = 200
paramserror = 400
unauth = 401
methoderror = 405
servererror = 500
json_dict = {"code":code,"message":message,"data":data}
code 请求状态码
message 后端返回的消息
data 后端定义的数据
def result(code=HttpCode.ok,message="",data=None,kwargs=None):
json_dict = {"code":code,"message":message,"data":data}
if kwargs and isinstance(kwargs,dict) and kwargs.keys():
json_dict.update(kwargs)
return JsonResponse(json_dict)
def ok():
return result()
def params_error(message="",data=None):
return result(code=HttpCode.paramserror,message=message,data=data)
def unauth(message="",data=None):
return result(code=HttpCode.unauth,message=message,data=data)
def method_error(message='',data=None):
return result(code=HttpCode.methoderror,message=message,data=data)
def server_error(message='',data=None):
return result(code=HttpCode.servererror,message=message,data=data)
② 注册视图
使用 ajax 的方式注册,同样可以将前端传递过来的数据,通过 Form 注册表单验证。
class RegisterView(View):
def get(self, request):
return render(request, 'auth/register.html')
def post(self, request):
form = RegisterForm(request.POST)
if form.is_valid() and form.validate_data(request):
telephone = form.cleaned_data.get('telephone')
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = User.objects.create_user(telephone=telephone, username=username, password=password)
login(request, user)
return restful.ok()
else:
message = form.get_error()
return restful.params_error(message=message)
把消息添加到 add_error
message = form.get_error()
③ 实现登录注册功能