zoukankan      html  css  js  c++  java
  • Django学习--form(表单)

    01 表单基础

    1.1概念

    在html中,一个表单的元素是<form>.....</form>,在表单里面允许visitor做输入文本,选择,提交对象等等工作。对于当中<input>元素,明白用户输入的数据应该被返回的,还有这个数据应该通过哪种HTTP方式返回数据

    1.2http method

    对于表单数据的传输,主要两种方式:post和get,其中get方式数据从url传递,比如https://docs.djangoproject.com/search/?q=forms&release=1,其中数据为q='fomrs',release=1. 另一种方式是post方式,其数据在

    1.3.过程

    比如用户登录过程,用户在界面上输入用户名和密码,经过post方式提交后其数据就会被传入到对应的视图函数,并且将其经过某种处理进行验证

    02 表单建立

    2.1获取用户名

    <form action="/username/" method="post">
        <label for="user_name">User name: </label>
        <input id="user_name" type="text" name="user_name" value="{{ current_name }}">
        <input type="submit" value="OK">
    </form>

    2.2使用Django建立表单

    在应用目录下新建forms.py

    from django import forms
    
    class NameForm(forms.Form):
        your_name = forms.CharField(label='Your name', max_length=100)

    2.3视图函数对数据验证,views.py

    From 类有一个方法is_valid(),来验证是否满足要求

    from django.http import HttpResponseRedirect
    from django.shortcuts import render
    
    from .forms import NameForm
    
    def get_name(request):
        # if this is a POST request we need to process the form data
        if request.method == 'POST':
            # create a form instance and populate it with data from the request:
            form = NameForm(request.POST)
            # check whether it's valid:
            if form.is_valid():
                # process the data in form.cleaned_data as required
                # ...
                # redirect to a new URL:
                return HttpResponseRedirect('/thanks/')
    
        # if a GET (or any other method) we'll create a blank form
        else:
            form = NameForm()
    
        return render(request, 'name.html', {'form': form})

    03 模型创建表单

    3.1Django提供一个帮助类(ModelForm)可以从一个django模型创建一个Form类

    3.2创建Article

    >>> from django.forms import ModelForm
    >>> from myapp.models import Article
    
    # Create the form class.
    >>> class ArticleForm(ModelForm):
    ...     class Meta:
    ...         model = Article
    ...         fields = ['pub_date', 'headline', 'content', 'reporter']
    
    # Creating a form to add an article.
    >>> form = ArticleForm()
    
    # Creating a form to change an existing article.
    >>> article = Article.objects.get(pk=1)
    >>> form = ArticleForm(instance=article)

    3.3一个完整的例子

    from django.db import models
    from django.forms import ModelForm
    
    TITLE_CHOICES = (
        ('MR', 'Mr.'),
        ('MRS', 'Mrs.'),
        ('MS', 'Ms.'),
    )
    
    class Author(models.Model):
        name = models.CharField(max_length=100)
        title = models.CharField(max_length=3, choices=TITLE_CHOICES)
        birth_date = models.DateField(blank=True, null=True)
    
        def __str__(self):
            return self.name
    
    class Book(models.Model):
        name = models.CharField(max_length=100)
        authors = models.ManyToManyField(Author)
    
    class AuthorForm(ModelForm):
        class Meta:
            model = Author
            fields = ['name', 'title', 'birth_date']
    
    class BookForm(ModelForm):
        class Meta:
            model = Book
            fields = ['name', 'authors']
  • 相关阅读:
    Eclipse添加Android library错误的原因
    The primitive Java types
    TFS怎么查找一个用户提交的所有代码
    easyui tabs
    错误 CS0012 类型“xxx”在未引用的程序集中定义。必须添加对程序集“xxxx xxxxx”的引用
    Sql Server 列转逗号隔开的字符串 和 逆转
    DataTable程序分页 不推荐。
    EF执行存储过程并且返回DataSet
    EF运用成ADO.NET操作返回DataSet或者DataTable
    Sql 查询 表名 视图名称等
  • 原文地址:https://www.cnblogs.com/LQ6H/p/10134004.html
Copyright © 2011-2022 走看看