了解Django和Django FormView

时间:2018-11-15 20:57:50

标签: django django-models django-forms

我正在尝试创建一个Django Web应用程序,该应用程序接受表单/文本框中的文本,对其进行处理,然后重定向到显示已处理文本的网页。我编写了一个半功能的应用程序,发现调试非常具有挑战性,因为我不了解自己所做的大部分事情。我希望您能帮助我理解一些概念,链接到资源也很感激。

  1. 考虑以下简单模型:

    class ThanksModel(models.Model):
         thanks_text = models.CharField(max_length=200)
    

    是通过manage.py shell设置thank_text文本的唯一方法吗?如果我只有一个要显示的文本,这感觉很痛苦。如果我要显示仅显示“ hi”的网页,是否还需要创建模型?

  2. 考虑以下视图和模板:

    views.py
    class TestView(generic.FormView):
      template_name = 'vader/test.html'
      form_class = TestForm
      success_url = '/thanks/'
    
    test.html
    <form action = "{% url 'vader:thanks'%}" method="post">
      {% csrf_token %}
      {{ form }} 
      <input type = "submit" value = "Submit">
    </form>
    

    我需要创建另一个模型,视图和html模板并为“ / thanks /”更新urls.py,以便成功重定向成功的URL? (这就是我所做的。)在这种情况下,我是否需要使用success()或reverse()或reverse_lazy()?

1 个答案:

答案 0 :(得分:0)

在处理可能包含大量信息的对象,数据和数据库时使用模型。 例如,一个人就是一个模型。他们的属性是年龄,姓名,国籍等。

models.py

apply plugin: 'com.android.application'

android {

    def yo = rootProject
    compileSdkVersion yo.compileSdkVersion

    defaultConfig {
        applicationId "com.package.name"
        minSdkVersion yo.minSdkVersion
        targetSdkVersion yo.targetSdkVersion
        versionCode yo.appVersionCode
        versionName yo.appVersion
        multiDexEnabled true
    }

    buildTypes {
        debug {
            applicationIdSuffix ".dev"
            splits.abi.enable = false
            splits.density.enable = false
            aaptOptions.cruncherEnabled = false

        }
        release {
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    dataBinding {
        enabled = true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

}

dependencies {

    implementation project(':module1')
    implementation project(':base')

    implementation 'com.android.support:multidex:1.0.3'

}

apply plugin: 'com.google.gms.google-services'

Thi处理一个对象的多位信息。 (对象是人)

谢谢消息不需要吗?因此,请删除模型以获取谢谢消息。只有视图,您可以在其中使用模板创建视图并将视图设置为url。


views.py

class Person(models.Model):
    Name = models.CharField(max_length=50)
    age = models.IntegerField()
    nationality = models.CharField(max_length=50)

test.html

class TestView(generic.FormView):
    template_name = 'vader/test.html'  # self explantory
    form_class = TestForm  # grabs the test form object
    success_url = reverse_lazy('vader:thanks') # this makes sure you can use the name of the url instead of the path

def ThanksView(request):  # its simple so you don't even need a class base view. a function view will do just fine. 
    return render(request,"thanks.html")

thanks.html

<form action = "{% url 'vader:thanks'%}" method="post">
    {% csrf_token %}
    {{ form }} 
    <input type = "submit" value = "Submit">
</form>

url.py

    <h1>Thank you for Submitting</h1>
    <h2> Come Again </h2>

我还没有测试过,但是希望它能帮助并指导您正确的方向