131-使用login_required(),以及将当前的操作内容绑定到登陆者
2020-08-30 17:17 lzhshn 阅读(342) 评论(0) 收藏 举报【1】登录后的界面
假设有个叫login_ok.html的页面,当成功注册和成功登录后,会跳转到这个页面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if user.is_authenticated %}
<p>hello,{{user.username}}</p>
<p>login success,so,you can see the page!</p>
<span><a href="{% url 'simplesite:add' %}">add student</a><a href="{% url 'account:logout' %}">logout</a></span>
{% else %}
<p>please login first:</p>
<p><a href="{% url 'account:login' %}">login</a></p>
{% endif %}
</body>
</html>
这里先判断有没有user登录,如果有,则显示的登陆者信息,及相关操作的入口:添加学生(add student),注销(logout);
如果没有登录的,则提示进行登录(login)。
【2】假设登录后,录入一个学生信息,然后提交,最后可以看到所有的学生信息。
@login_required
def add_student(request):
current_user = request.user
if request.method == 'POST':
form = StudentForm(request.POST)
if form.is_valid():
new_student_info = form.save(commit=False)
new_student_info.user = current_user
new_student_info.master = current_user.username
new_student_info.save()
return HttpResponseRedirect(reverse('simplesite:info'))
else:
form = StudentForm
context = {'form': form}
return render(request, 'add_student.html', context)
@login_required
def show_student_info(request):
all_student = StudentInfo.objects.order_by('-add_time')
context = {'all_student':all_student}
return render(request, 'student_info.html', context)
在录入学生信息时,通过:current_user = request.user获取当前的登录用户,我们假定这个身份就是班主任。
然后根据之前定义的学生关系,让学生和这个班主任建立联系,并将学生的master属性,设置为当前user的username。然后进行存储,并跳转到显示学生信息的页面。
在录入学生和查看学生信息的views函数前,都使用了@login_required装饰器,这是django已经为我们写好的轮子,直接拿来使用,然后配置一下你所设置的登录url即可。
在setting.py里添加一条:LOGIN_URL = '/ac/login'即可。
浙公网安备 33010602011771号