【问题标题】:Attribute Error - Model object has no attribute 'COOKIES'属性错误 - 模型对象没有属性“COOKIES”
【发布时间】:2021-01-30 18:56:18
【问题描述】:

我最初在从我的 API 获取数据时遇到问题,它给出了“禁止”错误,现在我已经使用 cookie 和 csrf 令牌解决了这个问题,它不再工作了。

错误:

cookie_token = request.COOKIES[settings.CSRF_COOKIE_NAME]
AttributeError: 'networthChart' object has no attribute 'COOKIES'
[30/Jan/2021] "GET /api/networthchart/data/ HTTP/1.1" 500 102936

我正在尝试从端点获取数据并且出现此错误。 这是代码:

JS:

<script>
    function getCookie(name) {
        let cookieValue = null;
        if (document.cookie && document.cookie !== '') {
            const cookies = document.cookie.split(';');
            for (let i = 0; i < cookies.length; i++) {
                const cookie = cookies[i].trim();
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) === (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
    const csrftoken = getCookie('csrftoken');
    
    
    const request = new Request(
        "/api/networthchart/data/",
        {headers: {'X-CSRFToken': csrftoken}}
    );
    
    
    
    $(document).ready(function(){
      var endpoint = 'http://127.0.0.1:8000/api/networthchart/data/'
      var defaultData = []
      var labels = []
      
      $.ajax({
        method:"GET",
        url: endpoint,
        success: function(data){
          labels = data.labels
          defaultData = data.default
          var ctx = document.getElementById('myChart').getContext('2d');
          var myChart = new Chart(ctx, {
              type: 'bar',
              data: {
                  labels: labels,
                  datasets: [{
                      label: '# of Votes',
                      data: defaultData,
                             .......
</script>

观点:

class networthChart(APIView, View):  
    authentication_classes = []
    permission_classes = []
    
    @ensure_csrf_cookie
    def get(self, request, format=None):
        print("its working")
        labels = ["Red","Green"]
        default_items = [8,10]

        if not self.request.user.is_active:
           return HttpResponseForbidden("Not signed in") # any error you want to display       
        
        data = {
            "labels" : labels,
            "default" : default_items,
        }
        return Response(data)

【问题讨论】:

    标签: django cookies django-rest-framework django-views


    【解决方案1】:

    你正在装饰一个方法(一个属于一个类的函数)。装饰器通常用于装饰基于函数的视图,装饰您需要使用method_decorator 的方法。问题是方法的第一个参数总是类的实例,而装饰器假设它是请求实例。试试这个:

    from django.utils.decorators import method_decorator
    
    @method_decorator(ensure_csrf_cookie)
    def get(self, request, format=None):
    

    【讨论】:

    • 谢谢,我认为它现在可以工作了,顺便说一句,您似乎对此很有经验,您知道可能导致以下错误的原因:Forbidden: /api/networthchart/data/
    • @VardhanMahajan 看看这个链接Permissions - Django Rest Framework
    猜你喜欢
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2017-11-12
    • 2016-09-29
    相关资源
    最近更新 更多