使用django.views.login时如何传递额外的参数来验证函数?

时间:2016-08-02 19:52:17

标签: python django

我有一个看起来像这样的身份验证后端

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):

怎么做?

2 个答案:

答案 0 :(得分:1)

我相信您要求编写自定义身份验证后端并在其中定义自己的authenticate方法。

是的,请检查Django documentation。如上所述,针对身份验证(**凭据)运行authenticate方法。 这意味着您可以传递任何必需的kwargs参数,包括&#39; country&#39;。

在你的情况下:

  1. 添加&#39; country&#39;方法声明
  2. 在进行身份验证时将国家/地区作为附加参数传递给&#39;用户。
  3. 就是这样。 希望它有所帮助。

答案 1 :(得分:0)

您需要对AuthenticationForm进行子类化,并覆盖clean方法,以便使用您的额外参数调用authenticate

然后,在您的urls.py中,将您的authentication_form传递给登录视图。

相关问题