13.Django表单

前面我们在学习模板和查询的时候,有添加用的需求,今天我们学习Django的表单,来实现这一功能。

创建一个chapter_form的项目和formapp的app。

models.py

class User(models.Model):
    name = models.CharField(max_length=20)
    email = models.EmailField()
    avatar = models.URLField()

在formapp中创建forms.py文件

from django import forms

class AddUserForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    avatar = forms.URLField()

在views.py

from django.shortcuts import render, redirect

from django.http import HttpResponse
from .models import User
from .form import AddUserForm

def index(request):
    # 如果是post请求
    if request.method == 'POST':
        # 将参数转化为form
        form = AddUserForm(request.POST)
        # 判断是否有效表单
        if form.is_valid():
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            avatar = form.cleaned_data['avatar']
            # 存入数据库
            u = User(name=name, email=email, avatar=avatar)
            u.save()
            return redirect("/") # 转发
        else:
            return HttpResponse('添加失败')
    else:
         #如果是get请求 查询所有用户
        users = User.objects.all()
        # 创建一个表单
        form = AddUserForm()
        return render(request, 'index.html', {'users':users, 'form':form})

在formapp下创建文件夹templates/然后添加index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>添加用户</h3>
<!--普通的html表单-->
<form method="post">
    <!--防csrf攻击-->
    {% csrf_token %}

    <!--此处的form就是form.py中定义的AddUserForm,Django将会转换成html表单-->
    {{ form }}

    <!--这个需要自己写,form不包含在内-->
    <input type="submit" value="添加">
</form>

<h3>用户列表</h3>
<ul>
 <!--展示用户-->
    {% for user in users %}
        <li>
            <h4>
             用户名: {{ user.name }}
            </h4>
            <div>
                {{ user.email }}
            </div>
            <img style="width: 45px" src="{{ user.avatar }}" alt="头像加载失败">
        </li>
    {% endfor %}

</ul>
</body>
</html>

同步数据库,启动服务器。

添加用户后,下面也同时将会展示。

声明:原创文章,版权所有,转载请注明出处,https://litets.com。