测开之路一百四十七:用WTForms实现编辑功能

接上一篇的内容

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

把视图逻辑修改一下

# 视图层from datetime import datetimefrom flask.views import MethodViewfrom flask import render_template, redirect, url_for, request

from personal.models import db, Employee, Departmentfrom 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

访问

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

修改信息

修改成功



原文地址:https://www.cnblogs.com/zhongyehai/p/11537771.html

时间: 2024-08-29 17:17:51

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

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

可以使用flask.make_response构造自定义响应信息 构造一个响应信息为文本,状态码为404 响应 响应数据为json,状态码为200 返回html # coding:utf-8from flask import Flask, make_response, render_templateimport json app = Flask(__name__) @app.route("/rp/")def send_response(): """ 构造响

测开之路一百三十七:实现图片上传和查询渲染功能

两种办法: 1.把接收的图片存到工程的某一文件夹下,数据库的img字段下存对应的路径,要用的时候根据路径去找图片 2.把接收的图片转成二进制存到img字段下,要用的时候再把二进制转回图片 这里采用第一种: 必须的元素 <form action="/post_feedback/" enctype="multipart/form-data" method="POST" class="form-horizontal">&

测开之路一百四十一:蓝图实现程序模块化

把每一个模块独立出来,然后在主app里面注册,这样就实现了模块之间互不干扰 新建蓝图 artcle.views.py """article蓝图"""from flask import request, render_template, redirect, url_forfrom flask import Blueprint article = Blueprint('article', __name__) @article.route('/arti

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

在上一篇的基础上,插入数据 查询 Department.query.all() # 用表对象查db.session.query(Department).all() # 用db对象查 查询前两条,直接python截取前两条数据 排序 默认升序:order_by(排序的字段名) 倒序:从sqlalchemy导入desc 查询单个指定字段 查询多个指定字段 只用一个变量接收多个查询结果的时候,SQLAlchemy默认用namedtuple进行命名处理 namedtuple结构: 别名:label(别名

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

使用WTForms表单验证,可以在数据建模时就设置验证信息和错误提示 创建模型时,设置验证内容,如必填.格式.长度 from flask_wtf import Formfrom wtforms import StringField, PasswordField, BooleanFieldfrom wtforms import validators class UserRegForm(Form): username = StringField('用户名', [validators.DataRequ

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

//定义全局的editor = nullvar editor = null; //ace_editor的初始化函数function ace_editor() { var editor = ace.edit("editor"); //初始化对象,"editor"为前端页面的id //设置风格和语言(更多风格和语言,请到github上相应目录查看) //editor.setTheme("ace/theme/clouds"); //编辑界面的主题--云

测开之路十七:设计模式之简单工厂和工厂方法

简单工厂:用于创建对象 创建Fruit类 创建几个类,继承Fruit 实现工厂 这样就只需要告诉工厂,需要生成一个什么样的类,就会生成一个对象,很方便 缺点,每增加一个对象需要改代码,需要加一个ifelse,针对此问题,可以用工厂方法改进 工厂方法 通过调create去生成对象 原文地址:https://www.cnblogs.com/zhongyehai/p/10793595.html

测开之路七十七:shell之if、case、for、while

选择语句(if语句) 大于:-gt判断目录是否存在:-d if [ 判断条件 ]; then statement1 Statement2elif [ 判断条件 ]; then statement1 Statement2.......else statement3 statement4fi 判断一个目录是否存在,如果存在,就删除,如果不存在,就创建 分支语句(case语句) case 值 inval1)    command1    command2    ...    commandN ;;va

测开之路二十五:彩票游戏

玩法 import random money = random.randint(0, 999) def generate_code(money): return list(set([ money[0] + money[1] + money[2], money[0]+money[2]+money[1], money[1] + money[0] + money[2], money[1] + money[2] + money[0], money[2] + money[0] + money[1], mo