所以我正在用DRF编写我的第一个项目,而且我在为我的视图集设置权限时遇到了一些问题.我已经使用djangorestframework-jwt进行身份验证.目前,我定义了一些不同的ViewSet.我想要做的是允许模型对象的所有者对该对象进行任何他们想要的更改,但是阻止其他人(除了管理员)甚至查看对象.基本上,我需要一种方法将权限类应用于特定方法,以便只允许管理员查看"列表",所有者"更新,销毁"等,并通过身份验证的用户"创建".目前我有这样的事情:
class LinkViewSet(viewsets.ModelViewSet):
queryset = Link.objects.all()
serializer_class = LinkSerializer
Run Code Online (Sandbox Code Playgroud)
与模型
class Link(models.Model):
name = models.CharField(max_length=200)
url = models.URLField()
# another model with a OneToMany relationship
section = models.ForeignKey('homepage.LinkSection', related_name='links', on_delete=models.CASCADE
owner = models.ForeignKey('homepage.UserProfile'), related_name='links', on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)
和我想申请的权限类
class IsOwner(permissions.BasePermission):
def has_object_permissions(self, request, view, obj):
return obj.owner == request.user.userprofile
Run Code Online (Sandbox Code Playgroud)
我确信通过编写完全自定义的视图可以实现这一点,但我有一种直觉,认为有一种更简单的方法可以做到这一点,特别是因为这基本上是我必须做的最后一件事来完成API.感谢您的帮助,如果您需要更多信息,请告诉我们.
我目前正在 ServerSocket 中编写一个基本的网络服务器,我正在尝试使用 java 8 流来清理我的代码。这一直很顺利,但是当我尝试使用 BufferedReader 使用流读取请求时,我的程序挂起并且请求从未完全读入。我在下面列出了差异。
使用流:
InputStream stream = socket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(stream));
System.out.println("----------REQUEST START---------");
List<String> rawRequest = in.lines()
.peek(System.out::println)
.map(line -> line.toString())
.collect(Collectors.toList());
System.out.println("----------REQUEST END---------\n\n");
Run Code Online (Sandbox Code Playgroud)
没有流:
InputStream stream = socket.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(stream));
List<String> rawRequest = new ArrayList<>();
try {
System.out.println("----------REQUEST START---------");
// read only headers
for (String line = in.readLine(); line != null && line.trim().length() > 0; line = in.readLine()) {
System.out.println(line);
rawRequest.add(line);
}
System.out.println("----------REQUEST END---------\n\n");
} catch (IOException …Run Code Online (Sandbox Code Playgroud)