解决django “TypeError:object of type 'type' has no len()”问题

解决django “TypeError:object of type ‘type’ has no len()”问题

django中网页出现以下错误:

Forbidden (403)
CSRF verification failed. Request aborted.

Help
Reason given for failure:

    CSRF token missing or incorrect.

In general, this can occur when there is a genuine Cross Site Request Forgery, or when Django's CSRF mechanism has not been used correctly. For POST forms, you need to ensure:

Your browser is accepting cookies.
The view function passes a request to the template's render method.
In the template, there is a {% csrf_token %} template tag inside each POST form that targets an internal URL.
If you are not using CsrfViewMiddleware, then you must use csrf_protect on any views that use the csrf_token template tag, as well as those that accept the POST data.
The form has a valid CSRF token. After logging in in another browser tab or hitting the back button after a login, you may need to reload the page with the form, because the token is rotated after a login.
You're seeing the help section of this page because you have DEBUG = True in your Django settings file. Change that to False, and only the initial error message will be displayed.

You can customize this page using the CSRF_FAILURE_VIEW setting.

解决方法一:

把django工程文件的setting.py中的“’django.middleware.csrf.CsrfViewMiddleware’,”这一句注释掉。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

解决方法二:django工程的app文件的views.py添加屏蔽装饰器。

from django.views.decorators.csrf import csrf_exempt   
@csrf_exempt 

比如app的views.py开始的代码为:

from django.shortcuts import render
from django import forms
from django.template import RequestContext
from django.template.loader import get_template
from django.core.paginator import Paginator
from django.core.urlresolvers import reverse
from django.http import HttpResponse, HttpResponseRedirect


from depotapp.models import Product
# Create your views here.


def create_product(request):

    if request.method == 'GET':
        return render(request, 'create_product.html')
    if request.method == 'POST':
        title = request.POST.get('title')
        description = request.POST.get('description')
        image = request.POST.get('image')
        price = request.POST.get('price')
        Product.objects.create(
            title=title,
            description=description,
            image_url=image,
            price=price
        )
        return render(request, 'create_product.html')
……

加屏蔽装饰器之后的代码后:

from django.shortcuts import render
from django import forms
from django.template import RequestContext
from django.template.loader import get_template
from django.core.paginator import Paginator
from django.core.urlresolvers import reverse
from django.http import HttpResponse, HttpResponseRedirect


from depotapp.models import Product
from django.views.decorators.csrf import csrf_exempt
# Create your views here.


@csrf_exempt
def create_product(request):

    if request.method == 'GET':
        return render(request, 'create_product.html')
    if request.method == 'POST':
        title = request.POST.get('title')
        description = request.POST.get('description')
        image = request.POST.get('image')
        price = request.POST.get('price')
        Product.objects.create(
            title=title,
            description=description,
            image_url=image,
            price=price
        )
        return render(request, 'create_product.html')
……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值