Django+前端+数据库Day6,初始Form,ModelForm

Django+前端+数据库Day6,初始Form,ModelForm

码农世界 2024-05-26 前端 78 次浏览 0个评论

目录

1.手动在数据库中添加三行数据

2.用户列表的创建

views

html

3.新建用户

原始方法新建用户

views

        html

原始方法思路不被采用的太麻烦了

4.初始form

views

2user_add.html

5.ModleForm(推荐)

views

user_model_form_add.html

6.添加错误提示

views

对user_model_form_add.html进行修改

在settins.py中

用户编辑页面

user_edit的views.py

user_edit的html页面和user_model_form_add.html的页面一样

删除页面


1.手动在数据库中添加三行数据

insert into app01_userinfo(name,password,age,account,create_time,gender,depart_id)

VALUES("小明","123",23,100.87,"2020-11-11",4,1),

("小王","123",23,100.87,"2020-11-11",4,1),

("小红","123",23,100.87,"2020-11-11",4,1);

2.用户列表的创建

views

def user_list(request):
    """ 用户管理 """
    # 获取所有用户列表 [obj,obj,obj]
    queryset = models.UserInfo.objects.all()
    """
    # 用Python的语法获取数据
    for obj in queryset:
        print(obj.id, obj.name, obj.account, obj.create_time.strftime("%Y-%m-%d"), obj.gender, obj.get_gender_display(), obj.depart_id, obj.depart.title)
        # print(obj.name, obj.depart_id)
        # obj.depart_id  # 获取数据库中存储的那个字段值
        # obj.depart.title  # 根据id自动去关联的表中获取哪一行数据depart对象。
    """
    return render(request, 'user_list.html', {"queryset": queryset})

html

{% extends 'layout.html' %}
{% block content %}
        
            
                {#                target="_blank"在新页面跳转打开#}
                
                新建用户
            
        
        
            
                
                    
                    用户列表
                
                
                    {% for obj in queryset %}
                        
                    {% endfor %}
                    
ID 姓名 密码 年龄 余额 时间 性别 部门 操作
{{ obj.id }} {{ obj.name }} {{ obj.password }} {{ obj.age }} {{ obj.account }} {{ obj.create_time|date:"Y-m-d H:i:s" }}
{#  模板语法不能用()会自动补充 #}
                            
{{ obj.get_gender_display }} {{ obj.depart.title }} 编辑 删除
{% endblock %}

3.新建用户

原始方法新建用户

views

def user_add(request):
    '''添加用户'''
    if request.method == "GET":
        context = {
            'gender_choices': models.UserInfo.gender_choices,
            "depart_list": models.Department.objects.all()
        }
        return render(request, 'user_add.html', context)
    # 获取用户提交的数据
    name = request.POST.get('name')
    pwd = request.POST.get('pwd')
    age = request.POST.get('age')
    account = request.POST.get('ac')
    ctime = request.POST.get('ctime')
    gender = request.POST.get('gd')
    depart_id = request.POST.get('dp')
    # 添加到数据库中
    models.UserInfo.objects.create(name=name, password=pwd, age=age,
                                   account=account, create_time=ctime,
                                   gender=gender, depart_id=depart_id)
    # 返回到用户列表页面
    return redirect("/user/list/")

        html

{% extends 'layout.html' %}
{% block content %}
        
                
                    新建用户
                
        
            
{% csrf_token %}
{% endblock %}

原始方法思路不被采用的太麻烦了

1.用户提交数据没有校验

2.错误页面上应有错误提示

3.页面上每一个字段都需要重新写一遍

4.关联的数据还要手动获取,循环展示在页面当中

4.初始form

views

class MyForm(Form):

        user = forms.CharField(widget=forms.Input)

        pwd = forms.CharField(widget=forms.Input)

        email = forms.CharField(widget=forms.Input)

def user_add(request):

        if(request.method == "GET"):

                form = MyForm()

                return render(request, 'user_add.html',{'form':form})

2user_add.html

        {% for field in form%}

                {{ field }}

        {% endfor %}

{{ form.user }}

{{ form.pwd }}

{{ form.email }}

5.ModleForm(推荐)

views

class UserModelForm(forms.ModelForm):
    class Meta:
        model = models.UserInfo
        fields = ['name', 'password', 'age', 'account', 'create_time', 'gender', 'depart']
    def __init__(self,*args, **kwargs):
        super().__init__(*args, **kwargs)
        # 循环找到所有的插件,添加
        for name,field in self.fields.items():
            field.widget.attrs = {"class": "form-control","placeholder":field.label}
def user_model_form_add(request):
    '''添加用户基于ModelForm版本'''
    form = UserModelForm()
    return render(request,'user_model_form_add.html',{'form':form})

user_model_form_add.html

{% extends 'layout.html' %}
{% block content %}
        
                
                    新建用户
                
        
            
{% csrf_token %} {% for field in form %} {{ field }} {% endfor %}
{% endblock %}

6.添加错误提示

views

def user_model_form_add(request):
    '''添加用户基于ModelForm版本'''
    if request.method =="GET":
        form = UserModelForm()
        return render(request,'user_model_form_add.html',{'form':form})
    form = UserModelForm(data=request.POST)
    # 调用form.is_valid()拿着data=request.POST的数据,对field的数据进行注意校验
    if form.is_valid():
        # 校验成功获取数据
        # print(form.cleaned_data)
        # 如果数据合法保存数据自动存到models.UserInfo类中
        form.save()
        return redirect('/user/list/')
    # 校验失败获取错误信息form.errors
    # print(form.errors)
    # 校验错误(在页面上显示错误)
    return render(request, 'user_model_form_add.html', {'form': form})

对user_model_form_add.html进行修改

{#        novalidate不让浏览器进行自动校验#}
            
{% csrf_token %} {% for field in form %} {{ field }} {# 获取第一个错误的信息#} {{ field.errors.0 }} {% endfor %}

在settins.py中

将报错改成中文

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'

用户编辑页面

user_edit的views.py

def user_edit(request,nid):
    '''编辑用户'''
    # 根据id去数据库获取要编辑的哪一行的数据对象放在外面get和post都能用到
    row_object = models.UserInfo.objects.filter(id=nid).first()
    if  request.method =="GET":
        form = UserModelForm(instance=row_object)
        return render(request, 'user_edit.html', {'form': form})
    #在提交的时候不再新增数据,而是吧新提交的数据更新到原来的上面
    form = UserModelForm(data=request.POST,instance=row_object)
    if form.is_valid():
        form.save()
        return redirect('/user/list/')
    return render(request, 'user_edit.html', {'form': form})

user_edit的html页面和user_model_form_add.html的页面一样

删除页面

def user_delete(request, nid):
    models.UserInfo.objects.filter(id=nid).delete()
    return redirect('/user/list/')
{ obj.id }}/delete/">删除

转载请注明来自码农世界,本文标题:《Django+前端+数据库Day6,初始Form,ModelForm》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,78人围观)参与讨论

还没有评论,来说两句吧...

Top