我英语不好
我想要一个登录页面,我使用 ModelForm 和 LoginView。
当我想查看该页面时,我收到此错误:
BaseModelForm.__init__() got an unexpected keyword argument 'request'
当我不使用表格时,总是返回到同一页面。我检查了request.method,是GET!
这是我的表格:
class LoginForm(ModelForm):
def __init__(self, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
class Meta:
model = User
fields = ['username', 'password']
查看:
class Login(LoginView):
form_class = LoginForm
template_name = 'account/login.html'
def get_success_url(self):
return reverse_lazy('account:home')
和登录.html
<form action="{% url 'account:home' %}" method="post">
{% csrf_token %}
<div class="input-group mb-3">
<input id="username" type="text" class="form-control" placeholder="Username">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-user"></span>
</div>
</div>
</div>
<div class="input-group mb-3">
<input id="password" type="password" class="form-control" placeholder="Password">
<div class="input-group-append">
<div class="input-group-text">
<span class="fas fa-lock"></span>
</div>
</div>
</div>
<div class="row">
<!-- /.col -->
<div class="col-12">
<button type="submit" class="btn btn-primary btn-block btn-flat">Sign In</button>
</div>
<!-- /.col -->
</div>
</form>
当我使用我的表单(带有功能视图)时,我的浏览器不建议我保存的登录信息。
LoginView
有点棘手:它将请求传递给表单,让ModelForm
登录用户,需要从超级调用中的kwargs
中删除,例如:
class LoginForm(ModelForm):
def __init__(self, *args, request=None, **kwargs):
super().__init__(*args, **kwargs)
class Meta:
model = User
fields = ['username', 'password']
目前,您的
LoginForm
当然不会登录用户,因此不会做太多事情。
注意:自 PEP-3135 [pep] 起,如果第一个参数是定义方法的类,第二个参数是方法,则无需带参数调用
函数的第一个参数(通常为super(…)
)。self