我创建了一个登录和注册模型,还创建了一个发布模型,用户可以在其中发布标题和描述。但是,当我使用用户登录并创建帖子时,其他用户也会查看该帖子。
我正在将Django(python)与数据库sql一起使用。
用于注册表格:
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
class UserCreateForm(UserCreationForm):
class Meta:
fields = ("username", "email", "password1", "password2")
model = get_user_model()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["username"].label = "Display name"
self.fields["email"].label = "Email address"
url.py:
from django.conf.urls import url
from django.contrib.auth import views as auth_views
from . import views
app_name = 'accounts'
urlpatterns = [
url(r"login/$",auth_views.LoginView.as_view(template_name="accounts/login.html"),name='login'),
url(r"logout/$", auth_views.LogoutView.as_view(), name="logout"),
url(r"signup/$", views.SignUp.as_view(), name="signup"),
]
如何将我的帖子限制为该特定用户?
答案 0 :(得分:1)
嗯,很简单。您需要像这样定义帖子模型和用户模型之间的关系:
$ file WebRTC.framework/WebRTC
WebRTC.framework/WebRTC: Mach-O universal binary with 4 architectures: [x86_64:Mach-O 64-bit dynamically linked shared library x86_64] [arm64]
WebRTC.framework/WebRTC (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
WebRTC.framework/WebRTC (for architecture i386): Mach-O dynamically linked shared library i386
WebRTC.framework/WebRTC (for architecture armv7): Mach-O dynamically linked shared library arm_v7
WebRTC.framework/WebRTC (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64
现在在“创建后视图”中,您可以这样操作:
from django.contrib.auth import get_user_model
User = get_user_model()
class Post(models.Model):
created_by = models.ForeignKey(User)
# rest of the fields
最后在ListView中,您需要定义如下查询集:
from django.contrib.auth.mixins import LoginRequiredMixin
class PostCreateView(LoginRequiredMixin, CreateView):
# ...
def form_valid(self, form):
form.created_by = self.request.user
return super(PostCreateView, self).form_valid(form)
答案 1 :(得分:0)
您的问题是一个称为授权的概念。您需要检查用户对帖子的访问权限,因此每个用户只能看到他的帖子。
首先在每个实例上使用user
在post
模型旁边保存ForeignKey
。这样每个帖子都会分配一个user
。
现在与每个用户一起访问帖子视图时,检查该用户是否已通过身份验证,如果通过,则检查该用户是否是该帖子的所有者,如果不是,则给他403拒绝权限错误。 / p>
例如,如果您的Post
模型是这样的:
class Post(models.Model):
user = models.ForeignKey(User)
content = models.CharFie.........
.....
然后在每个访问帖子的请求上,检查是否允许用户查看该帖子:
post = Post.objects.get(id=1) # For example you want to check post with id of 1
if post.user.id == request.user.id:
# Then allow user to see it,
else:
# Raise error 403
注意:还要在帖子查看前添加login_required
装饰器。或IsAuthenticated
权限级别(如果您使用的是 CBV )。