Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 基于类的视图、响应头和COR_Django_Cors_Django Rest Framework - Fatal编程技术网

Django 基于类的视图、响应头和COR

Django 基于类的视图、响应头和COR,django,cors,django-rest-framework,Django,Cors,Django Rest Framework,如果这是一个非常基本的问题,我深表歉意,但我对web开发相对较新,今天大部分时间都在讨论以下问题-非常感谢您的帮助 1。基于类的通用视图 我只是在这里浏览教程,并根据我自己的基本需求修改它,最终得到如下基本视图: class EList(generics.ListCreateAPIView): model = trax #permission_classes = (permissions.IsAuthenticatedOrReadOnly,) serializer_cl

如果这是一个非常基本的问题,我深表歉意,但我对web开发相对较新,今天大部分时间都在讨论以下问题-非常感谢您的帮助

1。基于类的通用视图

我只是在这里浏览教程,并根据我自己的基本需求修改它,最终得到如下基本视图:

class EList(generics.ListCreateAPIView):
    model = trax 
    #permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    serializer_class = TraxSerializer
我也在构建一个外部服务,这意味着我遇到了跨源资源共享问题(COR)。理想情况下,我需要将标题设置为
[“Access Control Allow Origin”]=“*”
,但我不确定如何使用这些基于类的通用视图来实现这一点,即使在搜索之后也是如此。这可能吗?我只是找错地方了

我已经找到了,汤姆提到这是可能的,但似乎无法将这一点纳入我的上述观点,这将引导我进入下一步

2.)基于类的视图

为了尝试在设置标题方面获得更大的灵活性,并尝试我在CORS上的帖子中发现的内容,我决定恢复到标准的基于类的视图,如下所示:

class EList(APIView):
    """
    List all snippets, or create a new snippet.
    """
    def get(self, request, format=None):
        trax = trax.objects.all()
        serializer = TraxSerializer(trax, many=True)
        return Response(serializer.data)
    def post(self, request, format=None):  
        serializer = TraxSerializer(data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
但是,我得到以下错误:

无法对没有权限的视图应用DjangoModel权限
.model
.queryset
属性

有没有什么办法可以让我在这里尝试设置响应头?这也是我当前的权限:

'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly',
    ]

感谢您的帮助,

要使此功能正常工作,您需要允许外部web服务发出跨源请求。最简单的方法是安装软件包并在
settings.py
中添加服务主机名,如下所示:

CORS_ORIGIN_WHITELIST = (
    'myservice.com',
)

其中,
myservice.com
是进行ajax调用的外部服务。另外,请记住以下操作。

对于Django框架本身,您可以执行以下操作:

您可以放置通配符“*”或任何其他URL,而不是URL“”

class PriceListTableView(TemplateView):
    template_name = "pages/price_list_table.html"

    def get(self, request, *args, **kwargs):
        response = super().get(request, *args, **kwargs)
        response['Access-Control-Allow-Origin'] = 'https://origin.com'
        return response

可能适用于Django REST框架,也可能不适用于Django REST框架。

您使用哪个客户端发出post请求?是jquery、angularjs还是一些移动应用程序?我最终使用了这个非常有用的软件包