Django 表单介绍和查用方法

Django 中的表单

在jango中的表单与平常意义的表单在理解上有所不同.我们先来说说常见的表单

HTML forms:

在HTML中一个表单就是一个集合,集合的内容是<form></form>里的元素,像文本框,单选框,操控按钮等,让用户操作,使才用户录入的信息返回服务器。但是这里面用html创建出的元素功能过于简单。例如<input></input>提供用户输入,但是在我们不对其做限制的时候(js实现)用户的输入是不受限制的,或是说合法性我们只能在数据返回到服务器的时候做逻辑判断再把判断结果发回给用户。

Django的表单:

django中的表单形式可以实现复杂的业务处理。html中的表单是把前端数据直接返回服务器,但是在jango中实现表单数据采集一共分3步:1.为前端渲染准备数据结构的定义(string or int ?)在第一步里我们可以细致化的设置每一个input框输入内容的格式例如:邮箱.可以限制输入内容的长度。2.在前端html渲染后台定义好的数据结构在这一步渲染后的form里的各个元素会根据先前设置实现自动判断用户输入是否满足条件,例如:邮箱的格式是否正确      3.接受表单提交数据到服务器直至每个元素的输入都合法后才可以触发表单提交动作,与html中表单提交类似

这里我们直接来看下Django中的表单使用例子

from django import forms

class NameForm(forms.Form):
    your_name = forms.CharField(label=’Your name’, max_length=100)

这个表单类只有一个字段(your_name),我们采用人性化的标签字段,这

将出现在<label>当它呈现时,我们限制该输入框最多允许长度为100的字符串

我们在views中写这么一段代码

from django.shortcuts import render
from django.http import HttpResponseRedirect
def get_name(request):
# 如果是POST请求
    if request.method == ’POST’:
    #通过接收到的数据创建表单实例
        form = NameForm(request.POST)
        # 检查它是不是合法
        if form.is_valid():
            return HttpResponseRedirect(’/thanks/’)
    else:
        form = NameForm()
        return render(request, ’name.html’, {’form’: form})
—- >在html页面中写 >
<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

这里我们在views中写下这段代码,如果用户第一次进入表单所在的页面,form为NameForm()

这时候前端html会渲染出后台定义好的form的每一个元素

当然jango的Form也提供了表单前端渲染时候的几个选项

form.as_table  在<tr>中渲染

form.as_p   在<p>中渲染

form.as_ul 在<li>中渲染

这里还可以更细致的控制前端渲染

{{ form.non_field_errors }}
<div class="fieldWrapper">
    {{ form.subject.errors }}
    <label for="id_subject">Email subject:</label>
    {{ form.subject }}
</div>

<div class="fieldWrapper">
    {{ form.message.errors }}
    <label for="id_message">Your message:</label>
    {{ form.message }}
</div>

<div class="fieldWrapper">
    {{ form.sender.errors }}
    <label for="id_sender">Your email address:</label>
    {{ form.sender }}
</div>

<div class="fieldWrapper">
    {{ form.cc_myself.errors }}
    {{ form.cc_myself }}
</div>

objects.errors表示该标签在录入中如果格式错误,报错信息的位置

{{ field.label }} 表示字段的label

{{ field.label_tag }} 表示该字段的label在一个<label>标签内

{{ field.value }} 表示用户输入的值

{{ field.label }}  :表示字段的label
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Django 增删改查项目的示例。 首先,创建一个 Django 项目,然后创建一个名为 `myapp` 的应用程序。 接下来,在 `myapp` 目录下创建一个名为 `models.py` 的文件,并定义模型类,例如: ```python from django.db import models class Book(models.Model): title = models.CharField(max_length=200) author = models.CharField(max_length=200) published_date = models.DateField() def __str__(self): return self.title ``` 然后,在 `myapp` 目录下创建一个名为 `views.py` 的文件,并定义视图函数,例如: ```python from django.shortcuts import render, redirect from .models import Book from .forms import BookForm def book_list(request): books = Book.objects.all() return render(request, 'book_list.html', {'books': books}) def book_create(request): if request.method == 'POST': form = BookForm(request.POST) if form.is_valid(): form.save() return redirect('book_list') else: form = BookForm() return render(request, 'book_form.html', {'form': form}) def book_update(request, pk): book = Book.objects.get(pk=pk) if request.method == 'POST': form = BookForm(request.POST, instance=book) if form.is_valid(): form.save() return redirect('book_list') else: form = BookForm(instance=book) return render(request, 'book_form.html', {'form': form}) def book_delete(request, pk): book = Book.objects.get(pk=pk) book.delete() return redirect('book_list') ``` 在上面的代码,`book_list` 视图函数用于获取所有书籍并在模板显示它们。`book_create` 视图函数用于创建新书籍。`book_update` 视图函数用于更新现有书籍。`book_delete` 视图函数用于删除书籍。 接下来,在 `myapp` 目录下创建一个名为 `forms.py` 的文件,并定义表单类,例如: ```python from django import forms from .models import Book class BookForm(forms.ModelForm): class Meta: model = Book fields = ['title', 'author', 'published_date'] ``` 然后,在 `myapp` 目录下创建一个名为 `urls.py` 的文件,并设置 URL 路由,例如: ```python from django.urls import path from . import views urlpatterns = [ path('', views.book_list, name='book_list'), path('new', views.book_create, name='book_create'), path('edit/<int:pk>', views.book_update, name='book_update'), path('delete/<int:pk>', views.book_delete, name='book_delete'), ] ``` 最后,在 `myapp` 目录下创建一个名为 `templates` 的目录,并在其创建 `book_list.html` 和 `book_form.html` 模板文件。 `book_list.html` 模板文件示例: ```html <!DOCTYPE html> <html> <head> <title>Book List</title> </head> <body> <h1>Book List</h1> <table> <thead> <tr> <th>Title</th> <th>Author</th> <th>Published Date</th> <th>Action</th> </tr> </thead> <tbody> {% for book in books %} <tr> <td>{{ book.title }}</td> <td>{{ book.author }}</td> <td>{{ book.published_date }}</td> <td> <a href="{% url 'book_update' book.pk %}">Edit</a> <a href="{% url 'book_delete' book.pk %}">Delete</a> </td> </tr> {% endfor %} </tbody> </table> <a href="{% url 'book_create' %}">New Book</a> </body> </html> ``` `book_form.html` 模板文件示例: ```html <!DOCTYPE html> <html> <head> <title>Book Form</title> </head> <body> <h1>Book Form</h1> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Save</button> </form> </body> </html> ``` 现在你就拥有了一个简单的 Django 增删改查项目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值