131-使用login_required(),以及将当前的操作内容绑定到登陆者
2020-08-30 17:17 lzhshn 阅读(315) 评论(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'即可。