当前位置: 首页 > news >正文

网站建设 预算网奇seo培训官网

网站建设 预算,网奇seo培训官网,wordpress 主题 改名,cpc引流做网站cpa推广背景: 在flask-admin 的modelview视图下实现自定义视图的表单修改/编辑是件不太那么容易的事情,特别是想不自定义前端view的情况下。 材料: wtformsflask_sqlalchemy 制作: 上代码 1、模型代码 from .exts import db from …

背景:

在flask-admin 的modelview视图下实现自定义视图的表单修改/编辑是件不太那么容易的事情,特别是想不自定义前端view的情况下。

材料:

wtforms+flask_sqlalchemy

制作:

上代码

1、模型代码

from .exts import db
from flask_login import UserMixin
from datetime import datetimeclass AiConfig(db.Model, UserMixin):__tablename__ = 'ai_config'id = db.Column(db.Integer, primary_key=True, autoincrement=True)created_at = db.Column(db.TIMESTAMP, default=datetime.utcnow)updated_at = db.Column(db.TIMESTAMP, default=datetime.utcnow)status = db.Column(db.Integer)ai_name = db.Column(db.String(128))

注:默认日期函数可以采用 default=datetime.utcnow 来实现

2、视图测代码

a、AiConfigForm 表单

class AiConfigForm(form.Form):def get_countries():return Organ.query.order_by('updated_at').all()ai_name = fields.StringField('AI名称', validators=[validators.DataRequired()])ai_code = fields.StringField('AI编号', validators=[validators.DataRequired()])ai_extends = fields.TextAreaField('配置扩展', widget=TextArea())root_url = fields.URLField('根URL', validators=[validators.DataRequired()], widget=URLInput())organ = QuerySelectField('机构名称', validators=[validators.DataRequired()], query_factory=get_countries, get_label='org_name')  description = fields.TextAreaField('描述', widget=TextArea())status = fields.SelectField('状态', choices=[(1, '有效'), (0, '无效')], default=0)

b、modeview视图下实现表单新增

   @expose('/new/', methods=('GET', 'POST'))def create_view(self):bean = AiConfig()bean.updated_at = datetime.today()form = AiConfigForm(request.form, obj=bean)if self.validate_form(form):model = self.create_model(form)if model:flash(gettext('Record was successfully created.'), 'success')return redirect(self.get_save_return_url(model, is_created=True))if self.create_modal and request.args.get('modal'):template = self.create_modal_templateelse:template = self.create_templatereturn self.render(template, form=form)

注:上面代码片段中这样修改update_at 是不生效的,目前尚未找到在这个代码交互中修改表单AiConfigForm 中并未定义字段update_at 属性的方法 (因为属性赋值是在其self.create_model()内置函数中实现的)

c、modelview 视图下实现表单修改

    @expose('/edit/', methods=('GET', 'POST'))def edit_view(self):id = request.args['id']return_url = request.values.get('url') or self.get_url('.index_view')model = self.get_one(id)if model is None:flash(gettext('Record does not exist.'), 'error')return redirect(return_url)form = AiConfigForm(request.form, obj=model)if self.validate_form(form):model.updated_at = datetime.today()if self.update_model(form, model):flash(gettext('Record was successfully saved.'), 'success')# save buttonreturn redirect(self.get_save_return_url(model, is_created=False))   if request.method == 'GET' or form.errors:self.on_form_prefill(form, id)if self.edit_modal and request.args.get('modal'):template = self.edit_modal_templateelse:template = self.edit_templatereturn self.render(template, form=form)

注:上述代码片段中 model.updated_at = datetime.today() 是有效的,因为在self.update_model(form,model) 内置函数中只是将form 中表单数据通过 form.populate_obj(model) 值cp 的方式简单覆盖来实现,我们只需要在调用该方法前将model 进行修改便可生效。

效果 

1、编辑/新增 view中不存在日期2 

 

2、数据库中存在日期

3、列表中该记录存在日期

 

注:这就充分说明通过上述逻辑实现了新增日期和修改日期的后台修改

疑问与经验 

疑问

1、为啥不在AiConfigForm 表单中通过影藏字段来实现日期呢?

该方案有尝试,但是不行,因为数据库属性是日期类型的,实体中该字段也是日期类型,如果只是在表单中采用影藏字段,新增时非常好用,只需要通过form.updated_at.data=datetime.today()实现赋值,但编辑时就会因为模型字段与表单中针对updated_at 字段的类型定义不一致导致无法通过populate_obj 函数进行模型值赋值导致报异常,同时由于此刻表单中并没有updated_at这样的日期类型字段,有的只是影藏字段,故无法form.updated_at.data=datetime.today() 实现赋值。当然如果不怕麻烦可以写2个form 视图就可以友好结果上述问题。

2、为啥不直接自定义view模板呢?

当然可以,只是因为懒。

3、为啥不建2个AiConfigForm 视图,一个用于编辑一个用于新增?

当然可以,而且可以做到很优雅,只是懒

经验

1、在ModelView 的子视图中重写部分方法,如@expose('/new/', methods=('GET', 'POST'))和@expose('/edit/', methods=('GET', 'POST')),中如果采用wtforms 自定义表单,但又不想自定义表单视图,那么只需要简单的通过form = AiConfigForm(request.form, obj=bean) 方法在上面新增、编辑函数中使用wtforms 表单。但这里要说明的是AiConfigForm(request.form, obj=bean) 中的 obj 对象接收的是模型,通过把模型赋值给obj 的方式实现已有数据的回填,该方案在编辑中非常有用

 

 

 

 

http://www.yidumall.com/news/86647.html

相关文章:

  • 云服务器 部署网站赤峰seo
  • 用什么做响应式网站百度推广优化怎么做
  • 网站增加网页百度图片识别在线使用
  • 2017年最新网站设计风格杭州搜索引擎排名
  • 开车小视频素材安卓优化大师下载安装
  • 中国建设银行预约网站首页关键路径
  • c2c网站有哪些?网站建设制作模板
  • web网站开发的流程图小程序开发公司前十名
  • wordpress图片特效插件下载东莞网站seo公司
  • 四川炜航建筑公司网站推广页面
  • 创意产品设计获奖作品太原关键词优化服务
  • 六安网站优化关键词搜索点击软件
  • 做网站的电话号码国内搜索网站排名
  • 做网站公司用盗版代码给客户起诉了seo入门培训学校
  • 网站自然排名怎么做济南最新消息今天
  • 购买域名网站网络营销公司全网推广公司
  • 小型网站网站建设需要采集站seo提高收录
  • 东营seo网站建设费用提高工作效率
  • 网站建设动画代码常州网站建设
  • 企业网站备个人怎么安装百度
  • 用git 做网站最热门的短期培训课程
  • 武汉网站建设的公司网站出售
  • 太原做网站的工作室百度统计收费吗
  • 网站发多少篇文章开始做外链seo快速排名多少钱
  • 一个电子商务网站的用户购买行为监测报告文档格式怎么做?网店seo排名优化
  • 网站必须公安备案吗游戏推广拉人渠道
  • 安徽网站建设cnfgwindows优化软件哪个好
  • 做电商网站有什语言好seo公司 引擎
  • 山西忻州市忻府区青岛网站seo
  • 中国建设银行客服网站百度引擎入口官网