Django REST Swagger不显示POST方法

时间:2019-04-13 14:32:15

标签: python django django-rest-framework django-swagger

我在使用Django REST Swagger时遇到问题。我已经使用DRF为用户创建了一个简单的视图集(仅用于显示我的问题),其中AppUser是我的自定义用户模型,并且未在文档中显示POST方法,但是我可以使用Postman进行调用并创建新资源

我正在使用:

  • Django 2.1
  • Django-rest-swagger 2.2.0
  • Djangorestframework 3.9.1

这是我的代码:

views.py

class UserViewSet(viewsets.ModelViewSet):

    queryset = AppUser.objects.all()
    serializer_class = UserSerializer

serializers.py

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = AppUser
        fields = '__all__'

urls.py

from django.conf.urls import url, include
from rest_framework.routers import SimpleRouter
from rest_framework_swagger.views import get_swagger_view
import app.views as app

# creating router
router = SimpleRouter()
router.register(r'users', app.UserViewSet)

schema_view = get_swagger_view(title='My app API')

# register urls
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^docs', schema_view) 
]

在这里您可以看到我的应用程序文档的样子:

actual API documentation

我想得到这样的东西:

ideal documentation

我已经尝试了有关创建Swagger文档的多个教程,并在User模型上进行了尝试,但是我仍然只收到GET请求。我在做什么错了?

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我知道了。我尚未正确登录,因此未针对settings.py中DRF的DEFAULT_PERMISSION_CLASSES设置中列出的权限进行身份验证。

window.addEventListener("load", () => {

const canvas = document.querySelector('#canvas');
const ctx = canvas.getContext('2d');

console.log("hi!")

canvas.height = window.innerHeight;
canvas.width = window.innerWidth;

let painting = false;

function startPosition(e){
    painting = true;
    draw(e);
}

function endPosition(){
    painting = false;
    ctx.beginPath();

    var imgData = ctx.getImageData(0, 0, window.innerHeight, window.innerWidth);

    console.log(imgData);

}

function draw(e) {

    if (!painting) return;

    ctx.lineWidth = 10;
    ctx.lineCap = 'round';

    ctx.lineTo(e.clientX, e.clientY);
    ctx.stroke();

    ctx.beginPath();
    ctx.moveTo(e.clientX, e.clientY);
}

canvas.addEventListener("mousedown",startPosition);
canvas.addEventListener("mouseup",endPosition);
canvas.addEventListener("mousemove",draw);

使用 has_permission()根据此处定义的权限列表检查HTTP方法POST,PUT,PATCH等。

登录后效果很好。

编辑:登录问题是Django-rest-swagger 2.2.0在JWT身份验证下无法正常工作,所以我降级为2.1.2。