Python 如何防止登录用户访问';登录';或';注册';Django版本1.9中的页面?
我对Python很陌生 我的问题是,我想限制已经登录的用户访问登录和注册页面 本质上,我所寻找的是类似@login\u required decorator的东西,它允许未登录的用户访问这些页面 到目前为止,我已经Python 如何防止登录用户访问';登录';或';注册';Django版本1.9中的页面?,python,django,Python,Django,我对Python很陌生 我的问题是,我想限制已经登录的用户访问登录和注册页面 本质上,我所寻找的是类似@login\u required decorator的东西,它允许未登录的用户访问这些页面 到目前为止,我已经 看看其他的问题,比如,我在这里尝试了这个解决方案,但它对我不起作用 我搜索了Django文档、Django女孩和其他提供学习Django教程的网站 以下是我的views.py,用于登录: def login_view(request): # Login View to begin
- 看看其他的问题,比如,我在这里尝试了这个解决方案,但它对我不起作用
- 我搜索了Django文档、Django女孩和其他提供学习Django教程的网站
def login_view(request): # Login View to begin user session
print(request.user.is_authenticated())
if request.method == 'POST':
form = UserLogInForm(request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
print(request.user.is_authenticated())
return HttpResponseRedirect('/')
else:
form = UserLogInForm()
return render(request, 'login.html', {'form': form})
else:
form = UserLogInForm()
return render(request, 'login.html', {'form': form})
以及注册:
class signup_view(View):
form_class = UserSignUpForm
template_name = 'signup.html'
# Blank form is requested
def get(self, request):
form = self.form_class(None)
return render(request, self.template_name, {'form': form})
# Form is filled in and posted to DB - Process the Data
def post(self, request):
form = self.form_class(request.POST)
if form.is_valid():
# Further checks before committing object to the DB
# Cleaned Data
first_name = form.cleaned_data['first_name']
last_name = form.cleaned_data['last_name']
email = form.cleaned_data['email']
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = User.objects.create_user(first_name=first_name,
last_name=last_name,
email=email,
username=username,
password=password
)
user.set_password(password)
user.save()
user = authenticate(email=email, username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return HttpResponseRedirect('/')
return render(request, self.template_name, {'form': form})
如果有人知道任何解决方案,那就太棒了,谢谢。因为您使用的是基于类的视图,所以您可以使用和在检查方法测试中确定用户是匿名的:
class signup_view(UserPassesTestMixin, View):
...
def test_func(self):
return self.request.user.is_anonymous()
您可以使用
@user\u passes\u test
装饰器对另一个视图执行类似的操作。我想您可以添加如下中间件:
您的应用程序/中间件/用户限制\u中间件.py
这些文件应该是:
class UserRestrictionMiddleware:
def process_request(self, request):
if request.user.is_authenticated():
request_path = request.path_info
if request_path.startswith('/login/') or request_path.startswith('/register/') :
return HttpResponseRedirect('.... to whereever you want...')
将其添加到您的设置中。py的中间件类如下:
“您的应用程序.middleware.user\u restriction\u middleware.UserRestrictionMiddleware”,将此代码添加到POST请求表单之前
class login(request):
if request.user.is_authenticated:
return redirect('app_name_space_name:your_url_name_to_send_authenticated_user_to')
#Your codes here
您可以重定向到站点的主页,而不是完全阻止访问。我认为从用户的角度来看,这会更直观。@SaketMehta最终到达你不想去的地方从来都不是直观的。至少注册一条消息通知用户。@Melvyn这是真的,我同意。@user\u passes\u test decorator适用于login\u视图,但我无法让userpassestimxin(test\u func)重定向到所需页面;知道如何选择页面重定向到的URL吗?您需要在类级别定义
login\u URL
,请参阅。