簡體   English   中英

將 html 輸入發送到 Django 中的 views.py

[英]Send html input to views.py in Django

我正在嘗試將輸入文本從 index.html 發送到我的“結果”視圖函數。 當我單擊“生成摘要”按鈕時,它顯示 csrf 驗證失敗。缺少 Csrf 令牌。需要緊急幫助。

視圖.py

from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
from .models import Input
from django.views.decorators.csrf import csrf_protect

def home(request):
    input=Input.objects.all()
    template=loader.get_template('home/index.html')
    context={
        'input':input,
    }
    return HttpResponse(template.render(context,request))

def result(request,input_text):
    Input.input_text = request.POST('input_text')
    return HttpResponse("<h1> text is"+Input.input_text)

索引.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8"/>
        <title>Title</title>

        {% load staticfiles %}
        <link rel='stylesheet'href="{% static 'css/bootstrap.min.css' %}" type='text/css'/>
    </head>
    <body background="/static/home/img/bg.jpg">
        <center><h1> <font color="white" >Summarizeit.com !</h1></center>

        <form name="myform" action="." method="post">{% csrf_token %}
            <div class="form-group">
                <center><label for="abc">Input Text</label>
                <input type="text" name="input_text"class="form-group"   id="abc"placeholder="Text input">
            </div>
            <br><br>
            <center><button type="submit" class="btn btn-default">  Generate Summary !</button>
        </form>
    </body>
</html>

主頁/urls.py

from django.conf.urls import url, include
from . import views

urlpatterns = [

    url(r'^$', views.home, name='home'),
]

finalproject/urls.py(根項目)

from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', include('home.urls'))
 ]

模型.py

from django.db import models

class Input(models.Model):
    input_text = models.CharField(max_length=250)

    def __str__(self):
        return self.input_text

設置.py

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See      https://docs.djangoproject.com/en/1.9/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'y)m04wnmm%i_#uih%^j5&aqeozlp!gt#px&z!*uf=-%v98x#-i'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition 

INSTALLED_APPS = [
'home',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
 ]

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

ROOT_URLCONF = 'finalproject.urls'

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
 },
]

WSGI_APPLICATION = 'finalproject.wsgi.application'



DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.sqlite3',
    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}



AUTH_PASSWORD_VALIDATORS = [
{
    'NAME':     'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
},
{
    'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
},
{
    'NAME':  'django.contrib.auth.password_validation.CommonPasswordValidator',
 },
{
    'NAME':   'django.contrib.auth.password_validation.NumericPasswordValidator',
 },
]



LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


STATIC_URL = '/static/'

出於某種原因,您以艱難的方式呈現模板,這繞過了 Django 為您所做的所有自動操作:最重要的是,運行包含 CSRF 令牌的上下文處理器。

你的觀點應該是這樣的:

def home(request):
    input=Input.objects.all()
    context={
        'input':input,
    }
    return render(request, 'home/index.html', context)

另請注意,您在結果視圖中設置Input.input_text完全沒有意義; 你需要創建一個 Input 的實例,設置它的 input_text,然后保存它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM