如何通过Django正确登录用户

时间:2019-03-19 03:16:10

标签: 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['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对象。它返回None。

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

我有一个reference solution found here,但没有运气。

代码如下:

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

1 个答案:

答案 0 :(得分:0)

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

试试这个

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)