接上一篇的内容

把原先的数据库模型全部给默认值,后面form赋值的时候就不用传位置参数了

把视图逻辑修改一下

# 视图层
from datetime import datetime
from flask.views import MethodView
from flask import render_template, redirect, url_for, request from personal.models import db, Employee, Department
from personal.froms import EmployeeForm class EmployeeCreateOrEdit(MethodView):
def get(self, id=None):
""" get进来的时候如果没有传id,就创建一个emp的实例,如果有id,就把该id的信息查出来 """
# 编辑的时候要先返回对应id已存在的信息
emp = Employee() if not id else db.session.query(Employee).get(id) # 根据id获取数据库已存在的信息
form = EmployeeForm(request.form, obj=emp) # form获取信息,先到form里面去找,如果没找到就在emp对象里面去找
form.department_id.choices = [(d.id, d.name) for d in Department.query.all()] # 查询出部门信息,方便页面渲染
# form.gender.choices = [('男', '男'), ('女', '女')]
return render_template('admin/emp-edit.html', form=form) def post(self, id=None):
form = EmployeeForm(request.form)
# 如果没有id,说明是新增,如果有id,则说明是编辑,需要把新的信息替换旧的信息
emp = Employee() if not id else db.session.query(Employee).get(id) # 根据id获取数据库已存在的信息
form.populate_obj(emp) # form里面的对象,name、gender···赋给emp
# 如果是修改,即传过了id过来,把修改后的信息添加到session里面去
if not id:
db.session.add(emp)
db.session.commit()
return redirect(url_for('admin.emp_list'))
注册到蓝图里面

前端加上编辑的url

访问

编辑第一条,读取除了原有的信息

修改信息

修改成功

测开之路一百四十七:用WTForms实现编辑功能的更多相关文章

  1. 测开之路一百四十九:jinja2模板之宏

    jinja2是python的模板引擎, 在写python web使用的过程中,macro可以节省大量的代码 比如上一篇的渲染页面 <!DOCTYPE html><html lang= ...

  2. 测开之路一百四十八:WTForms表单验证

    使用WTForms表单验证,可以在数据建模时就设置验证信息和错误提示 创建模型时,设置验证内容,如必填.格式.长度 from flask_wtf import Formfrom wtforms imp ...

  3. 测开之路一百四十六:WTForms之表单应用

    WTForms主要是两个功能:1.生成HTML标签  2.对数据格式进行验证 官网:https://wtforms.readthedocs.io/en/stable/ 这篇介绍用wtform生成htm ...

  4. 测开之路一百四十五:SQLAlchemy与后台模板整合之新增、查询、删除

    实现在页面上点击展示页就展示内容,点击新增页就触发新增功能 项目结构 admin.__init__ from flask import Blueprint admin = Blueprint('adm ...

  5. 测开之路一百四十四:ORM之SQLAlchemy查询

    在上一篇的基础上,插入数据 查询 Department.query.all() # 用表对象查db.session.query(Department).all() # 用db对象查 查询前两条,直接p ...

  6. 测开之路一百四十三:ORM框架之SQLAlchemy模型及表创建

    基于前一篇内容,可以使用模型的结构 目录结构 main,入口层 from flask import Flaskfrom flask_sqlalchemy import SQLAlchemy app = ...

  7. 测开之路一百四十二:ORM框架之SQLAlchemy建库、建表、数据库操作

    flask-SQLAlchemy是在原生SQLAlchemy的基础之上做了一层封装,安装flask-SQLAlchemy会自动安装SQLAlchemy 安装 传统的sql建表建字段 通过flask-S ...

  8. 测开之路一百二十七:flask之构造response对象

    可以使用flask.make_response构造自定义响应信息 构造一个响应信息为文本,状态码为404 响应 响应数据为json,状态码为200 返回html # coding:utf-8from ...

  9. 测开之路七十七:性能测试蓝图之js

    //定义全局的editor = nullvar editor = null; //ace_editor的初始化函数function ace_editor() { var editor = ace.ed ...

随机推荐

  1. vue-resource对比axios import ... from和import {} from 的区别 element-ui

    1.vue-resource对比axios 文章1 文章2 1.0 axios  params 配置参数在url 显示,form-data 用于 图片上传.文件上传 1.1 axios 全局配置 ax ...

  2. HashMap的相关面试题

    HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此 ...

  3. Linux学习--第十三天--日志、系统运行级别、grub加密

    日志 rsyslogd取代了syslogd. /var/log/cron #定时任务相关日志 /var/log/cups #打印信息相关日志 /var/log/dmesg #开机内核自检相关日志,dm ...

  4. for迭代

    for迭代 Python中最简单的循环机制是 while,打开交互式解释器,执行1到的5的循环 >>> count=1 >>> while count<=5: ...

  5. SpringBootMVC02——Spring Data JPA的使用&JSP的使用

    Spring Data JPA的使用 实体层 package com.littlepage.domain; import javax.persistence.Entity; import javax. ...

  6. DNS域名工作原理及解析

    0x00 定义 DNS( Domain Name System)是“域名系统”的英文缩写,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.DNS使用TCP和UDP端口53 ...

  7. 浅谈java虚拟机|系列1|架构简介

    今天开了一个专题.谈谈我们java程序员每天面对的java虚拟机(jvm). 本质上来说,jvm分两部分:编译器(compiler)和运行时(runtime). 所谓的编译器,简单来说,他就是个翻译机 ...

  8. feign请求写法

    @FeignClient(value = "test", url = "${proxy.srvs.test:}") public interface ISubS ...

  9. (极值点偏移问题的几种方案)已知$\dfrac{\ln x_1}{x_1}=\dfrac{\ln x_2}{x_2}$,求证:$x_1+x_2>2\text{e}$.

    第一个图适合在手机上操作(点击\(\checkmark\)显示/隐藏) 第二个图适合在电脑上操作(点击\(\checkmark\)显示/隐藏)

  10. U盘安装linux(CentOS Kali ubuntu)无法挂载_实测

    最新的Kali linux官方下载地址: https://www.kali.org/downloads/ 刻录软件官网:http://rufus.ie/ 1.打开. 2.插入U盘. 3.自动下载插件. ...