我有一个看起来像这样的身份验证后端
class Backend(object):
def authenticate(self, username=None, password=None):
# Do stuff
我的网址处理程序看起来像这样
url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
登录表格看起来像这样(标准表格,你可以跳过这个)
{% if not form.username.errors %}
<input id="id_username" name="username" type="text" class="form-control" placeholder="Username (admin)" autofocus>
{% else %}
<div class="form-group has-error">
{% for error in form.username.errors %}
<label class="control-label" for="id_username">{{ error }}</label>
{% endfor %}
<input id="id_username" name="username" type="text" class="form-control" placeholder="Username (admin)" autofocus>
</div>
{% endif %}
{% if not form.password.errors %}
<input id="id_password" name="password" type="text" class="form-control" placeholder="Password (admin)" autofocus>
{% else %}
<div class="form-group has-error">
{% for error in form.password.errors %}
<label class="control-label" for="id_password">{{ error }}</label>
{% endfor %}
<input id="id_password" name="password" type="text" class="form-control" placeholder="Password (admin)">
</div>
{% endif %}
我需要将额外的参数(例如country)传递给可能来自表单的authenticate函数。 新的身份验证功能应该是这样的
def authenticate(self, username=None, password=None, country=None):
怎么做?
答案 0 :(得分:1)
我相信您要求编写自定义身份验证后端并在其中定义自己的authenticate
方法。
是的,请检查Django documentation。如上所述,针对身份验证(**凭据)运行authenticate
方法。
这意味着您可以传递任何必需的kwargs参数,包括&#39; country&#39;。
在你的情况下:
就是这样。 希望它有所帮助。
答案 1 :(得分:0)
您需要对AuthenticationForm
进行子类化,并覆盖clean
方法,以便使用您的额外参数调用authenticate
。
然后,在您的urls.py中,将您的authentication_form
传递给登录视图。