首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django实战-信息资讯-Ajax 实现注册

Django实战-信息资讯-Ajax 实现注册

作者头像
小团子
发布2019-07-18 16:35:07
1.1K0
发布2019-07-18 16:35:07
举报
文章被收录于专栏:数据云团数据云团

Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

前一篇使用 Django 自带的 form 表单直接渲染到前端生成注册表单,而且对注册表单里的字段进行了再次验证判断,重写 clean 方法 is_valid。

在使用 ajax 进行请求注册前,需要定义数据格式,通过 json 进行数据通信。而对于不同请求返回后的参数不同,需要单独定义请求时,需要返回的数据格式。

from django.http import JsonResponse
  • JsonResponse 对象的 Content-Type 被设置为:application/json
class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None,**kwargs)
  • 默认情况下,JsonResponse 的传入参数是个字典类型。

① 定义请求返回数据

不管是 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 注册表单验证。

  • 通过 json 进行数据通信
  • {"message":"注册成功"} {"message":"注册失败"}
  • 定义 API {"code":404, "message":"","data":{}} 定义数据格式
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()

③ 实现登录注册功能

  • 通过 ajax 调用 post 方法
  • js 封装请求
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档