0

我有以下使用django-restframeworkand的类drf-spectacular。我可以在登录时通过 drf 默认路由执行 POST,但不能使用这些swagger-ui路由。

我可以去这个网址:http://example.com/api/schema/swagger-ui/#/organism/organism_create

在此处输入图像描述

但是当我点击Execute按钮时,什么都没有发生。我希望显示 CURL 命令等。此外,我在服务器后端看不到响应。与 GET 方法相反。在这里,服务器打印:11/Feb/2022 22:34:02] "GET /api/organism/ HTTP/1.1" 200 275

我确实去了登录,并首先提供了我的用户名和密码。

这个设置有什么问题?

模型.py

class Organism(models.Model):
    short_label = models.CharField(max_length=100)
    long_label = models.CharField(max_length=100)
    genus = models.CharField(max_length=100)

    def __str__(self):
        return self.long_label

序列化程序.py

class OrganismSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Organism
        fields = ('__all__')

视图.py

class ReadOnly(BasePermission):
    def has_permission(self, request, view):
        return request.method in SAFE_METHODS


class OrganismViewset(viewsets.ModelViewSet):
    queryset = models.Organism.objects.all()
    serializer_class = serializers.OrganismSerializer
    parser_classes = [parsers.MultiPartParser, parsers.FormParser]
    http_method_names = ['get', 'post', 'patch', 'delete']

    # Permissions
    permission_classes = [IsAuthenticated|ReadOnly]
    def get(self, request, format=None):
        content = {
            'status': 'request was permitted'
        }
        return Response(content)   

网址.py

router = SimpleRouter()
router.register('organism', views.OrganismViewset)

设置.py

我尝试了不同的设置。使用BasicAuth..,我得到一个询问用户名和密码的提示,但仍然没有任何反应。

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        #'rest_framework.permissions.IsAuthenticated'
        'rest_framework.permissions.AllowAny',
    ],
    'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema',
    #'DEFAULT_AUTHENTICATION_CLASSES': [
        #'rest_framework.authentication.BasicAuthentication',
        #'rest_framework.authentication.SessionAuthentication',
    #]
    'DEFAULT_PARSER_CLASSES': (
        [
            'rest_framework.parsers.FormParser',
            'rest_framework.parsers.MultiPartParser',
            'rest_framework.parsers.JSONParser',
        ]
     )    
}

当我尝试使用 Python 的request模块发布内容时,服务器会打印:

Bad Request: /api/organism/

但是,这可以使用 DRF 生成的 url:

在此处输入图像描述

GET 请求也有效:

在此处输入图像描述

带有 CURL 的 POST 也可以:

curl -X 'POST' 'http://example.com/api/organism/'   -H 'accept: application/json'   -H 'Content-Type: multipart/form-data'   -H 'X-CSRFTOKEN: ...'   -F 'short_label=adsfdsf'   -F 'long_label=asdfadf'   -F 'genus=adsfadfadf' --user "...."

{"id":4,"short_label":"adsfdsf","long_label":"asdfadf","genus":"adsfadfadf"}
4

0 回答 0