繁体   English   中英

'AnonymousUser' object 在 django 上不可迭代

[英]'AnonymousUser' object is not iterable on django

我一直在尝试重新创建一个社交网络,但在此过程中,我发现当用户注销时出现一个大错误,即 TypeError 'AnonymousUser' object is not iterable我尝试了不同的方法来执行此操作,例如使用if not request.user.is_authenticated():或 '@login_required' 但似乎没有任何效果。 如果未注册的用户试图查看一个页面,特别是主视图(主页),我想这样做,用户应该被重定向到登录页面。

视图.py

def home(request):
    following, created = Following.objects.get_or_create(user=request.user)
    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)

def profile(request, username=None):
    profile, created = Profile.objects.get_or_create(user=request.user)
    if username:
        post_owner = get_object_or_404(User, username=username)
        profile_bio = Profile.objects.filter(user_id=post_owner)
        user_posts = Post.objects.filter(user_id=post_owner)

    else:
        post_owner = request.user
        user_posts = Post.objects.filter(user=request.user)
        profile_bio = Profile.objetcs.filter(user=request.user)
        
    args1 = {
        'post_owner': post_owner,
        'user_posts': user_posts,
        'profile_bio': profile_bio,
    }
    return render(request, 'profile.html', args1)

网址.py

urlpatterns = [
    path('login', views.login, name='login'),
    path('register', views.register, name='register'),
    path('logout', views.logout, name='logout'),
    path('<username>/', views.profile, name='profile'),
]
urlpatterns = [
    path('', views.home, name='home'),
]

如果您有任何问题或需要查看更多代码,请告诉我;)

处理要求用户登录的最佳方法是使用自定义中间件。

class RequireLoginMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)

        if request.path != LOGIN_PATH and request.user.is_anonymous():
            return redirect('login')
        else:
            return response

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM