python - 如何停止在 django 中拥有匿名用户
问题描述
所以我有一个 django 项目,并且有一个视图(主视图)显示关注用户的帖子,并且需要对用户进行身份验证,如果没有用户登录,则代码返回 'AnonimousUser' 不是可迭代错误,如果此人在主视图上,我希望我的代码将匿名用户重定向到登录页面。经过一番调查,我意识到这可以通过自定义中间件来完成,但我不知道该怎么做,所以目前中间件只会在用户登录或匿名时打印。我能做些什么来完成这个中间件并摆脱那个 Anoniomus User 错误?
中间件.py
class LoginRequiredMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
return response
def process_view(self, request, view_func, view_args, view_kwargs):
if(request.user.is_authenticated):
print(Authenticated")
else:
print("Anonimous user")
视图.py
def home(request):
user = Following.objects.get(user=request.user)
followed_users = [i for i in user.followed.all()]
followed_users.append(request.user)
contents = Post.objects.filter(user__in = followed_users)
context = {
"contents": contents,
}
print("nice")
return render(request, 'home.html', context)
网址.py
urlpatterns = [
path('', views.home, name='home'),
path('login', views.login, name='login'),
path('register', views.register, name='register'),
path('logout', views.logout, name='logout'),
path('<username>/', views.profile, name='profile'),
]
如果您有任何问题或需要查看更多代码,请告诉我;)
解决方案
无需编写自定义中间件。
您可以像这样限制视图中的匿名用户
def home(request):
if not request.user.is_authenticated:
return redirect ('your_login_url')
user = Following.objects.get(user=request.user)
followed_users = [i for i in user.followed.all()]
followed_users.append(request.user)
或者你可以使用login_required
装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='your_login_url')
def home(request):
user = Following.objects.get(user=request.user)
followed_users = [i for i in user.followed.all()]
followed_users.append(request.user)
推荐阅读
- ruby - Shopify 插件脚本编辑器 - 未定义的方法
- token - 部署 ERC20 代币跨/多链?
- android - 类型与泛型类列表不匹配
- c# - 我尝试在 C# 中运行 sql 命令但出现错误
- swift - 如何从图库中获取照片?
- python - 如何向 stellargraph 数据集添加新边?
- tensorflow - 在火花数据集上应用张量流概率模型
- python - 列表推导中的多个 if/else
- javascript - Nuxt 中间件:手动刷新页面导致 Vuex 存储属性为“null”——如何解决?
- excel - 是否可以粘贴到由 vba 中的 Union 创建的范围内?