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 %}