python - Django Authentication - 页面重定向到主页,即使它进入异常
问题描述
我正在使用 Django 的User
表做我项目的简单用户注册部分。下面的代码应该在用户注册成功后重定向到主页,但即使我填写了用户名的重复(不正确)条目,它也会转到主页而不是在注册页面上显示错误。
PS - 尽量保持问题简短,不显示不必要的代码请阅读代码和日志中的评论,在那里添加额外的解释
def register(request):
if request.method == 'POST':
reqdict = to_reqdict(request)
print("reqdict", reqdict) # This statement printed in the logs
username = reqdict.get('email')
first_name = reqdict.get('first_name')
last_name = reqdict.get('last_name')
raw_password = reqdict.get('password')
try:
user = User.objects.create_user(username=username,first_name=first_name,
last_name=last_name,email=username, password=raw_password)
user.save()
user = authenticate(username=username, password=raw_password)
login(request, user)
print("user.is_authenticated>>>>>", user.is_authenticated) # This does not get printed in the logs
return redirect(reverse('home')) # Only this line redirects page to home page
except IntegrityError as e:
messages.error(request, "User already exists!")
print("error", e) #This error statement has got printed in the logs
except Exception as e:
messages.error(request, "Internal server error")
print("Other error", e)
return render(request, template_name="signup.html")
else:
return render(request, template_name="signup.html")
有关详细信息,请参阅日志:
System check identified no issues (0 silenced).
April 13, 2020 - 15:51:54
Django version 3.0.5, using settings 'backend.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[13/Apr/2020 18:56:33] "GET / HTTP/1.1" 200 7616 # Typed http://127.0.0.1:8000/ in the browser
[13/Apr/2020 18:56:38] "GET /register/ HTTP/1.1" 200 7916 # Opened Sign Up page, Filled up and Clicked Sign up (Submit) button
reqdict {'first_name': 'John', 'last_name': 'Doe', 'email': 'john@gmail.com', 'password': 'a', 'cpassword': 'a'} # It printed first print statement
error UNIQUE constraint failed: auth_user.username #It came to exception due to duplicate entry in the db but still got redirected to the homepage
[13/Apr/2020 18:56:57] "POST /register/ HTTP/1.1" 200 8181
[13/Apr/2020 18:56:59] "GET /home/ HTTP/1.1" 302 0 # It redirected to Home page, What makes my code goes here instead of sign up page again
[13/Apr/2020 18:56:59] "GET /?next=/home/ HTTP/1.1" 200 7616
在我捕获到主页的异常后发生了什么,除了下面的行之外没有其他行重定向到主页?
return redirect(reverse('home'))
JFYI、urls.py等views
urlpatterns = [
path('', views.user_login, name='user_login'),
path('home/', views.index, name='home'),
path('register/', views.register, name='register'),
]
视图.py
@login_required(login_url='/')
def index(request):
return render(request, template_name="home.html")
def user_login(request):
username = request.POST.get('username', None)
password = request.POST.get('password', None)
if not any([username, password]):
return render(request, template_name="login.html")
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# return render(request, template_name="base.html")
return JsonResponse({"message": "Redirect to home", "code":10001, "status":True}, status=200)
else:
return JsonResponse({"message": "Incorrect username or password. Please try again.", "code":10002, "status":False}, status=403)
请让我知道是否需要从代码中披露任何内容。
解决方案
推荐阅读
- android - 如何从 NativeScript 中的 Google 键盘中删除语音到文本(麦克风)?
- android - AOSP 存储库与私有存储库同步
- flutter - 在 Flutter 中使用 dio 和 multi_image_picker 包上传 s3 presignedurl
- python - 导入请求 - 不起作用。pip install requests/pip3 install requests..done
- java - ActionListener 知道哪个组件触发了动作
- c# - UWP DownloadsFolder.CreateFolderAsync 问题
- python - 如何在熊猫数据框中创建倾斜列?
- swift - ForEach 循环内的 Swift UI 旋转
- python - 从 JSON 输出中获取值 | Python
- asp.net-mvc - 将 Entity Framework Core 上下文传递到数据层