首页 > 解决方案 > /login login() 的 TypeError 缺少 1 个必需的位置参数:“用户”

问题描述

我收到错误“TypeError at /login login() 缺少 1 个必需的位置参数:'User'”

我是 Django 的新手。试图创建一个登录页面。

这是我的意见.py

from django.shortcuts import render,redirect
from .models import profile
from django.contrib.auth.models import User
from django.contrib import messages
from django.contrib.auth import authenticate



def index(request):
    
    return render(request,'index.html',)

def login(request,User):
    if request.method=='POST':
        username= request.POST.get('username')
        password = request.POST.get('password')

        user=authenticate(username=username,password=password)

        if user is not None:
            user.login(request,user)
            

            return render(request,'welcome.html',)

        else:
            messages.info(request , 'invalid credentials')
            return render(request,'login.html')
    else:
        return render(request,'welcome.html')

这是我的 urls.py


from django.urls import path
from . import views

urlpatterns=[
    path('',views.index,name='index'),
    path('login',views.login,name='login'),
    path('register',views.register,name="Login now")
    
]

标签: pythondjango

解决方案


login视图不应该包含参数,实际上对于给定的User视图,您根本不需要导入User模型。此外,为了登录,您应该使用login(…)方法 [Django-doc]。由于您已经有一个名为 的方法login,您应该以不同的名称导入它:

from django.contrib.auth import login as auth_login

# no User parameter
def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(username=username, password=password)
        if user is not None:
            auth_login(request, user)
            return render(request, 'welcome.html',)
        else:
            messages.info(request , 'invalid credentials')
            return render(request, 'login.html')
    else:
        return render(request, 'welcome.html')

注意:如果 POST 请求成功,您应该制作一个redirect [Django-doc] 来实现Post/Redirect/Get模式 [wiki]。这样可以避免在用户刷新浏览器时发出相同的 POST 请求。


推荐阅读