注册验证:django + ajax

1.Django服务端逻辑处理:

def register_(request):
    #如果是ajax请求返回true
    if request.is_ajax():
        username = request.GET.get('username')
        staff = StaffInfo.objects.filter(username=username).first()
        if staff:
            return HttpResponse('用户名已存在')
        else:
            return HttpResponse('用户名可用')
    
    if request.method == 'GET':
    	#可判断用户的登录状态,已登录则返回true
        if request.user.is_authenticated():
            return redirect('/')
        return render(request,'register.html')
    
    if request.method == 'POST':
        new_staff = StaffInfo()
        new_staff.username = request.POST.get('username')
        #若用户名不存在则返回空列表
        old_staff = StaffInfo.objects.filter(username=new_staff.username)
        
        if len(old_staff) > 0:
            return render(request,'register.html',{'message':'用户名已存在'})
        if request.POST.get('password') != request.POST.get('rpassword'):
            return render(request, 'register.html', {'message': '两次密码不一致'})
        #密码加密,第二个参数给None则每次加密出的都不一样,给固定的字符串,则不会
        new_staff.password = make_password(request.POST.get('password'),None,'pbkdf2_sha1')
        new_staff.job_number = request.POST.get('job_number')
        new_staff.department = request.POST.get('department')
        new_staff.name = request.POST.get('name')
        new_staff.save()
        #将注册用户对象加入request中,对应键值为:user
        auth.login(request,new_staff)
        return redirect('/')

2.前端页面:

<head>
    <meta charset="UTF-8">
    <title>Title</title>
    {#  要先加载静态资源模板  #}
    {% load static %}
    <script src="{% static 'js/jquery-1.11.3.js' %}"></script>
</head>
<body>
<form action="{% url 'reg' %}" method="post">
    {% csrf_token %}
    工号<input type="text" name="job_number">
    用户名<input type="text" name="username" id="username">
    密码<input type="password" name="password" id="pwd1">
    密码2<input type="password" name="rpassword" id="pwd2">
    部门<input type="text" name="department">
    姓名<input type="text" name="name" id="name">
    <button>提交</button>
</form>
<p><span id="resp"></span></p>
{{ message }}

ajax业务逻辑:

<script>
    $(function () {
        {# ajax验证用户名是否已存在 #}
        $('#username').blur(function () {
            var url = '/register/';
            data = 'username=' + $(this).val();
            $.get(url,data,function (resp) {
                console.log(resp);
                $('#resp').html('');
                $('#resp').html(resp)
            },'html')
        });

        {# from表单提交前的验证 #}
        $('form').submit(function () {
            var name = $('#name').val();
            var pwd1 = $('#pwd1').val();
            var pwd2 = $('#pwd2').val();
            if(pwd1 != pwd2){
                alert('两次密码不一致');
                return false
            }else if (name==''){
                alert('请输入姓名');
                return false
            }
        })
    })
</script>

补充:通过jquery可对元素对象进行监听和解除监听
应用场景:点赞功能,点赞后解除点击监听

$('#voke').click(function(){})
$('#voke').unbind()

3.模板中关于登录信息的使用:
如果用户当前没有登录,user 将设置为 django.contrib.auth.models.AnonymousUser 的一个实例。服务端可以通过 is_authenticated() 区分它们
前端可以通过 {% if request.user.is_authenticated %}判断用户是否登录

{% if request.user.is_authenticated %}
    {{ '已经登陆啦' }}
    <br>
    用户名{{ request.user.username }}
    <br>
    姓名{{ request.user.name }}
    <br>
    id{{ request.user.id }}

{% else %}
    {{ '还没登录哦' }}
{% endif %}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值