我想在所有视图中调用/inscription/views.py中的函数(因为它用于登录)。我需要在参数中传递用户名和密码以记录用户。
def login_user(request):
if request.method =='POST':
auth_form=AuthenticationForm(data=request.POST)
if auth_form.is_valid():
username = request.POST.get('username')
password = request.POST.get('password')
uti = authenticate(username = username,password = password)
if uti:
if uti.is_active:
login(request, uti)
return HttpResponseRedirect('/accueil')
else:
return HttpResponse("Your account is disabled.")
else:
return HttpResponse("Invalid login details supplied.")
else:
auth_form=AuthenticationForm()
return render_to_response('authentication.html',
{'auth_form': auth_form}, RequestContext(request))
def logout_user(request):
logout(request)
在我的base.html中,我想添加类似的内容:
<label class="form_login">pseudo : </label>
<input type="text" name="username" id="id_username" class="login_input">
<label class="form_login">mot de passe : </label>
<input type="text" name="password" id="id_password" class="login_input">
<input value="login" type="submit"/>
<button><a href="/inscription/logout">logout</a></button>
答案 0 :(得分:2)
如果我理解你的问题,你需要的是强制用户登录,如果他还没有登录,然后才能访问你的观点。为此,您只需使用login_required
decorator
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...
来自文档:
login_required() does the following:
- If the user isn’t logged in, redirect to settings.LOGIN_URL, passing
the current absolute path in the query string. Example:
/accounts/login/?next=/polls/3/.
- If the user is logged in, execute the view normally. The view code is
free to assume the user is logged in.
<强>更新强>
根据您的评论,现在我了解您需要在所有页面中为用户登录创建表单,或者如果他已经登录则需要注销链接。首先,您需要为这些视图定义URL:
url(r'^login/$', 'inscription.views.login', name='auth_login'),
url(r'^logout/$', 'inscription.views.logout', name='auth_logout'),
在你的base.html:
{% if user.is_authenticated %}
<a href="{% url 'auth_logout' %}">Logout</a>
{% else %}
<form method="post" action="{% url 'auth_login' %}">
{% csrf_token %}
<input type="text" name="username" id="id_username">
<input type="text" name="password" id="id_password">
<input type="submit" value="Log in" />
</form>
{% endif %}
作为旁注,我强烈建议您使用其中一个可重复使用的应用进行身份验证和注册。除非你有奇怪的要求。
http://django-registration-redux.readthedocs.org/en/latest/ http://django-allauth.readthedocs.org/en/latest/
答案 1 :(得分:0)
您面临的问题是,您希望登录和注销也能从其他页面开始工作,因此,您不需要使用任何额外的功能。您需要做的就是,只需将base.html扩展到所有其他html页面。然后你肯定能够从所有页面登录和注销。
假设您在base.html中有登录/注销
<label class="form_login">pseudo :</label>
<input type="text" name="username" id="id_username" class="login_input">
<label class="form_login">mot de passe : </label>
<input type="text" name="password" id="id_password" class="login_input">
<input value="login" type="submit"/>
<button><a href="/inscription/logout">logout</a></button>
现在制作一些其他html说test.html
一开始就写了
{% extends 'base.html' %}
后跟HTML标记。
别忘了使用
{% block content %} {% endblock %} **template tags**
在基本以及其他HTML页面中。
在其他页面中,您尝试在模板标签中编写完整的代码。
查询https://docs.djangoproject.com/en/1.7/topics/templates/
也尝试使用装饰器的概念。