我有以下使用django-restframework
and的类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"}