如何通过Django正确登录用户

如何通过Django正确登录用户,django,Django,我正在尝试登录Django中的用户。如果我使用下面的代码,一切正常 def login(request): return render(request, 'web/login.html') def home(request): if request.method == 'POST': if Member.objects.filter(username=request.POST['username'], password=request.POST['passwor

我正在尝试登录Django中的用户。如果我使用下面的代码,一切正常

def login(request):
    return render(request, 'web/login.html')

def home(request):
    if request.method == 'POST':
        if Member.objects.filter(username=request.POST['username'], password=request.POST['password']).exists():
            member = Member.objects.get(username=request.POST['username'], password=request.POST['password'])

            return render(request, 'web/home.html', {'member': member})
        else:
            context = {'msg': 'Invalid username or password'}
            return render(request, 'web/login.html', context)
在这里,我试图通过使用clean_data处理数据来执行相同的登录,但它给出了错误:

视图webApp.views.home未返回HttpResponse对象。它没有返回任何结果

这是否意味着我的表单数据为空或未发布

我有一个朋友,但没有运气

代码如下:

def login(request):
    return render(request, 'web/login.html')

def home(request):
    if request.method == 'POST':
        form = loginForm(request.POST)
        # check whether it's valid:

        if form.is_valid():
        # process the data in form.cleaned_data as required
            username =  form.cleaned_data['username']
            password =  form.cleaned_data['password']

            #if len(username) < 5 || len(password) < 5:

            if Member.objects.filter(username=username, password=password).exists():
                member = Member.objects.get(username=username, password=password)
                return render(request, 'web/home.html', {'member': member})
                print("success")
            else:
                context = {'msg': 'Invalid username or password'}
                return render(request, 'web/login.html', context)
                print('failed')
def登录(请求):
返回呈现(请求'web/login.html')
def home(请求):
如果request.method==“POST”:
form=loginForm(request.POST)
#检查它是否有效:
如果form.is_有效():
#根据需要处理form.U数据中的数据
username=form.cleaned_数据['username']
password=表单。已清除的_数据['password']
#如果len(用户名)<5 | | len(密码)<5:
如果Member.objects.filter(用户名=用户名,密码=密码).exists():
member=member.objects.get(用户名=用户名,密码=密码)
返回呈现(请求'web/home.html',{'member':member})
打印(“成功”)
其他:
上下文={'msg':'Invalid username或password'}
返回呈现(请求'web/login.html',上下文)
打印('失败')

错误的基本思想是,Django中的任何视图都必须返回
HttpResponse
或类似对象。在您的视图中,您不会一直返回
HttpResponse
。也就是说,程序执行不会进入代码的if…
子句中。并且执行不能进入
else..
子句,除非您定义它们。因此,我添加了一些
其他
条件。

试试这个

def home(请求):
如果request.method==“POST”:
form=loginForm(request.POST)
#检查它是否有效:
如果form.is_有效():
#根据需要处理form.U数据中的数据
username=form.cleaned_数据['username']
password=表单。已清除的_数据['password']
#如果len(用户名)< 5 | | len(密码)< 5:
如果Member.objects.filter(用户名=用户名,密码=密码).exists():
member=member.objects.get(用户名=用户名,密码=密码)
返回呈现(请求'web/home.html',{'member':member})
打印(“成功”)
其他:
上下文={'msg':'Invalid username或password'}
返回呈现(请求'web/login.html',上下文)
打印('失败')
其他:
上下文={'msg':'表单无效'}
返回呈现(请求'web/login.html',上下文)
其他:
上下文={'msg':'HTTP方法不是“POST”}
返回呈现(请求'web/login.html',上下文)

错误的基本思想是,Django中的任何视图都必须返回
HttpResponse
或类似对象。在您的视图中,您不会一直返回
HttpResponse
。也就是说,程序执行不会进入代码的if…
子句中。并且执行不能进入
else..
子句,除非您定义它们。因此,我添加了一些
其他
条件。

试试这个

def home(请求):
如果request.method==“POST”:
form=loginForm(request.POST)
#检查它是否有效:
如果form.is_有效():
#根据需要处理form.U数据中的数据
username=form.cleaned_数据['username']
password=表单。已清除的_数据['password']
#如果len(用户名)< 5 | | len(密码)< 5:
如果Member.objects.filter(用户名=用户名,密码=密码).exists():
member=member.objects.get(用户名=用户名,密码=密码)
返回呈现(请求'web/home.html',{'member':member})
打印(“成功”)
其他:
上下文={'msg':'Invalid username或password'}
返回呈现(请求'web/login.html',上下文)
打印('失败')
其他:
上下文={'msg':'表单无效'}
返回呈现(请求'web/login.html',上下文)
其他:
上下文={'msg':'HTTP方法不是“POST”}
返回呈现(请求'web/login.html',上下文)
def home(request):
    if request.method == 'POST':
        form = loginForm(request.POST)
        # check whether it's valid:

        if form.is_valid():
            # process the data in form.cleaned_data as required
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']

            # if len(username) < 5 || len(password) < 5:

            if Member.objects.filter(username=username, password=password).exists():
                member = Member.objects.get(username=username, password=password)
                return render(request, 'web/home.html', {'member': member})
                print("success")
            else:
                context = {'msg': 'Invalid username or password'}
                return render(request, 'web/login.html', context)
                print('failed')
        else:
            context = {'msg': 'Form is not valid'}
            return render(request, 'web/login.html', context)
    else:
        context = {'msg': 'HTTP method is not "POST"'}
        return render(request, 'web/login.html', context)