django "TypeError: object of type'type'has no len()"문제 해결

8463 단어
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.

해결 방법 1:
django 프로젝트 파일의 setting.py의'django.middleware.csrf.CsrfView Middleware'라는 구절을 주석해 주십시오.
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',
]

해결 방법2:django 프로젝트의 app 파일의views.py 차폐 장식기 추가.
from django.views.decorators.csrf import csrf_exempt   
@csrf_exempt 

예를 들어 앱의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')
……

좋은 웹페이지 즐겨찾기