Django - Render не работает в моем проекте - PullRequest
0 голосов
/ 02 января 2019

Я имею дело с формой, как 1 неделю, но не смог решить мою проблему.Возможно, я упускаю из виду то, что легко может быть найдено другими глазами, но в целом я не знаю, что делать.Я распознаю проблему, запустив форму сборки.Я должен был использовать render для формы, и это не удавалось при каждой попытке.Я могу подключить БД и показывать данные на html-страницах, но всякий раз, когда я использую render вместо render_to_response, это терпит неудачу.И я должен был использовать render для отправки запроса, как я знаю.Не только для формы, render не работает для всех.Даже для простого: def home(request): context = {'foo': 'bar'} return render(request, 'main.html', context)

models.py

class ModuleNames(models.Model):
    ModuleName = models.CharField(max_length = 50)
    ModuleDesc = models.CharField(max_length = 256)
    ModuleSort = models.SmallIntegerField()
    isActive = models.BooleanField()
    ModuleType = models.ForeignKey(ModuleTypes, on_delete=models.CASCADE, null = True)
    slug = models.SlugField(('ModuleName'), max_length=50, blank=True)

class Meta:
    app_label = 'zz'
def __unicode__(self):
    return self.status

forms.py

from django import forms
from MyApp.models import ModuleNames

class ModuleForm(forms.ModelForm):
    moduleName = forms.CharField(label='Module Name', max_length=50)
    ModuleDesc = forms.CharField(max_length = 256)
    ModuleSort = forms.IntegerField()
    isActive = forms.BooleanField()
    ModuleType = forms.IntegerField()

class Meta:
    model = ModuleNames
    fields =('moduleName','ModuleDesc','ModuleSort','isActive','ModuleType')

view.py

from django.views.generic import TemplateView
from django.shortcuts import render,render_to_response, redirect
from django.template import RequestContext
import json
from django.core.serializers.json import Serializer
from django.http import HttpResponse, Http404, HttpResponseRedirect
from urllib.parse import urlparse
from django.urls import resolve 
from django.db import connection
from collections import namedtuple
from django.db.models import F
from django.views.decorators.cache import cache_page
from django.views.decorators.csrf import csrf_protect

from MyApp.models import ModuleNames
from MyApp.forms import ModuleForm

def AddNewModule(request):
    template_name = 'addnewmodule.html'
    if request.method == 'GET':
        form = ModuleForm()
        posts = ModuleNames.objects.all()
        args = {'form': form, 'posts': posts }
        return render(request, template_name, args) #This part is showing data when i use render_to_response. But after clicking Save button on html page, it will give below first error.

    if request.method == 'POST':
        form = ModuleForm(request.POST)
        if form.is_valid():
            form.pop('csrfmiddlewaretoken', None)
            post = form.save(commit=False)
            post.save()
            text = form.cleaned_data['post']
            form = ModuleForm()
            args = {'form': form, 'text': text}
            return render(request, template_name, args)
  1. Ошибка, которая возникает при использовании render_to_response Ошибка проверки запрещенной (403) CSRF.Запрос отменен.

    Справка Причина сбоя: токен CSRF отсутствует или неверен.

  2. Ошибка при использовании render для любой функции

        Environment:
    Request Method: GET
    Request URL: http://127.0.0.1:8000/addnewmodule
    
    Django Version: 2.1.3
    Python Version: 3.7.1
    Installed Applications:
    ['MyApp',
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles']
    Installed 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']
    
    Traceback:
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/exception.py" in inner
    34.response = get_response(request)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
    126.response = self.process_exception_by_middleware(e, request)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/core/handlers/base.py" in _get_response
    124.response = wrapped_callback(request, *callback_args, **callback_kwargs)
    
    File "/Users/Cem/Documents/Projects/Python/Web/FirstApp/MyApp/views.py" in addnewmodule
    132.return render(request, template_name, args)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/shortcuts.py" in render
    36.content = loader.render_to_string(template_name, context, request, using=using)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/loader.py" in render_to_string
    62.return template.render(context, request)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/backends/django.py" in render
    61.return self.template.render(context)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/base.py" in render
    169.with context.bind_template(self):
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/contextlib.py" in __enter__
    112.return next(self.gen)
    
    File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/django/template/context.py" in bind_template
    246.updates.update(processor(self.request))
    
    Exception Type: TypeError at /addnewmodule
    Exception Value: 'module' object is not callable
    

1 Ответ

0 голосов
/ 02 января 2019

Читать о токенах CSRF в django, он используется для защиты сайта /

...