Django 判断用户是否登录
判断用户是否登录
效果图
当用户未登录时,逻辑上是不允许访问某些页面的。比如用户中心页面。因此就需要对某些页面做登录验证,而Django封装了这个方法。
用户中心前端页面:
用户中心
对应于此页面的VUE:
var vm = new Vue({
el:'#app',
delimiters:['[[', ']]'],
data:{
host:host,
username:username,
mobile:mobile,
email:email,
email_active:email_active,
set_email:false,
error_email:false,
error_email_message:'',
send_email_btn_disabled:false,
send_email_tip:'重新发送邮件',
},
mounted(){},
methods:{
// 检查email格式
check_email(){
// 匹配正则
var re = /^[a-z0-9][\w\.\-]*@[a-z0-9\-]+(\.[a-z]{2,5}){1,2}$/;
if(re.test(this.email)){
this.error_email = false;
}
else{
this.error_email_message = '邮箱格式错误';
this.error_email = true;
return;
}
},
// 保存email
save_email(){
// 检查email格式
this.check_email();
if(this.error_email == false){
var url = this.host + '/emails/';
axios.put(url, {
email:this.email
}, {
headers:{
'X-CSRFToken':getCookie('csrftoken')
},
responseType:'json'
}).then(response=>{
if(response.data.code == '0'){
this.set_email = false;
this.send_email_btn_disabled = true;
this.send_email_tip = '已发送验证邮件';
}
else if(response.data.code == '4101'){
location.href = '/login/?next=/info/';
}
else{
this.error_email_message = response.data.errmsg;
this.error_email = true;
}
}).catch(error=>{
console.log(error.response)
});
}
},
// 取消保存email
cancel_email(){
this.email = '';
this.error_email = false;
},
}
});
从视图函数接收变量:
let username = "{{ username }}";
let mobile = "{{ mobile }}";
let email = "{{ email }}";
let email_active = "{{ email_active }}";
工具js:
// 获取cokie
function getCookie(name){
var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
return r ? r[1] : undefined;
}
视图函数:
class UserInfoView(LoginRequiredMixin, View):
def get(self, request):
return render(request, 'user_center_info.html')
Django的LoginRequiredMixin类中封装了验证用户登录的代码,可以直接使用。
原始代码为:# 判断是否登录 if request.user.is_authenticated: # 已登录 return render(request, 'user_center_info.html') else: # 未登录 return redirect('/login/')
还需要在配置文件中指定被拦截之后重定向的页面:
LOGIN_URL = '/login/'
登录之后返回刚才浏览的页面:
在VUE中有这样一段代码:
location.href = '/login/?next=/info/';
这里指定了登录之后,重定向的页面是“info”。
所以在登录的视图函数接收一下这个参数,重定向的页面改一下就可以了。
# 接收重定向参数
next_url = request.GET.get('next', '/')
# 有两个参数,如果有next这个参数,则返回next指定的页面,若没有,则返回“/”
...
response = redirect(next_url)
response.set_cookie('username', user.username, max_age=60 * 60 * 24 * 14)
return response