6

这是我的看法,

def login_view(request) :
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
          email = form.cleaned_data['email']
          password = form.cleaned_data['password']
          user = authenticate(email=email, password=password)

          if user is not None:
              form = LoginForm()
              login(request, user)

我收到一个错误:

login() missing 1 required positional argument: 'user'

另外,我正在使用自定义用户模型

我的urls.py

urlpatterns = [
path('',views.register, name='register' ),
path('form',views.form, name = 'form'),
path('login',views.login, name = 'login ')]
4

4 回答 4

9

你没有使用正确的视图,试试这个

path('login',views.login_view, name = 'login ')
于 2018-07-26T14:29:25.540 回答
0
from django.urls import path, include
from django.contrib.auth import views

urlpatterns = [
path('',views.register, name='register' ),
path('form',views.form, name = 'form'),
path('login/', views.login, {'template_name': 'login.html'}, name='login'),
]

或者

from django.urls import path, include
from django.contrib.auth import views as auth_views

urlpatterns = [
path('',views.register, name='register' ),
path('form',views.form, name = 'form'),
path('login/', auth_views.login, {'template_name': 'login.html'}, name='login'),
]

如果你使用 django 自己的认证方案,第二个例子会更准确。

我实际上更改了 url 文件中的登录路径。我认为错误是由于路径连接造成的。那是路径=>

path('login',views.login, name = 'login ')]
于 2018-07-26T14:38:20.727 回答
0

Django 内置用户认证只接受用户名和密码登录。如果您想通过电子邮件和密码登录您的用户,您必须更改它。

于 2018-07-26T22:07:57.077 回答
0

您在views.py 中将您的函数声明为login_view,但您在urls.py 中将其称为登录。试试 view.login_view。

于 2021-05-14T22:25:59.343 回答