Django 基于类的视图、响应头和COR
如果这是一个非常基本的问题,我深表歉意,但我对web开发相对较新,今天大部分时间都在讨论以下问题-非常感谢您的帮助 1。基于类的通用视图 我只是在这里浏览教程,并根据我自己的基本需求修改它,最终得到如下基本视图: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
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还是一些移动应用程序?我最终使用了这个非常有用的软件包