django - How to properly login user via Django
问题描述
I am trying to login user in Django. If I use the code below everything works fine
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)
Here am trying to perform the same login by processing data using clean_data but it gives error:
The view webApp.views.home didn't return an HttpResponse object. It returned None instead.
Does it mean that my form data is empty or not posted?
I have a reference solution found here but with no luck.
Here is the code:
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')
解决方案
错误的基本思想是,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)
推荐阅读
- java - 在eclipse中编译groovy会产生编译时错误
- pact - 协议与其他工具的比较
- sql - 从两个表中选择记录,其中行可能不存在于第二个表中(与 LEFT JOIN 相关)
- python - 分配给python中第一个变量的值会发生什么?
- r - R使用嵌套的for循环和矩阵
- bounding-box - python-opencv用像素值绘制边界框
- reactjs - 为什么引导颜色类不能与 React 一起使用?
- asp.net-core - 在 ASP.NET Core 中从同一操作中的“application/json”或“application/x-www-form-urlencoded”请求正文中绑定模型
- java - Android:从 Assets/Raw 目录复制文件。到内部存储
- amazon-web-services - AWS Transcribe 保存到 Amazon S3 存储桶中的文件夹