【问题标题】:Edit and Update Method is Not working编辑和更新方法不起作用
【发布时间】:2018-07-27 07:05:31
【问题描述】:

我的问题是,从客户端使用 python-flask 编辑和更新值。我对此一无所知,也没有使用 MySQL 数据库的新 python-flask。我尝试使用此方法进行编辑和更新。但是,它不起作用。此外,当我们输入详细信息并提交时,详细信息将添加到数据库中。任何人都可以帮助我。

这里是 vehicletype.html 模板。

{% extends "base.html" %}
{% block head %}
{{super()}}
{% endblock %}

{% block navbar %}
{{super()}}
{% endblock %}


{% block content %}

<div class="row">
<ol class="breadcrumb">
    <li><a href="#">
        <em class="fa fa-home"></em>
    </a></li>
    <li class="active">Vehicletype > Create Vehicletype</li>
</ol>
</div> 
<div class="row">
<div class="col-md-6">
<form role="form" action="/post/vehicletype" method="post">

<div class="form-group">
    <label>VehicleType: </label>
    <input name="type" class="form-control" placeholder="enter vehicletype">
</div>

<input type="submit" class="btn btn-primary" value="Submit   ">
<input type="reset" class="btn btn-default" value="Reset">
</form>
</div>
</div>
{% endblock %}

这里是 details.html

{% extends "base.html" %}
{% block head %}
{{super()}}
{% endblock %}


{% block navbar %}
{{super()}}
{% endblock %}


{% block content %}

<div class="row">
<ol class="breadcrumb">
    <li><a href="#">
        <em class="fa fa-home"></em>
    </a></li>
    <li class="active">Vehicletype>View</li>
</ol>
</div><!--/.row-->
<div class="row">
<div class="col-md-12">
<table class="table table-striped table-hover">

<thead>
<tr>
    <th>
        Id
    </th>
    <th>
       VehicleType
    </th>

    <th>
        Dateofsub
    </th>

    <!--<th>
        Control
    </th>-->
    <th>
        Delete
    </th>
</tr>
</thead>
{% for values in vehicletype   %}
<tr>
    <th>{{values.id}}</th>
    <td>{{values.type}}</td>
    <td>{{values.dateofsub}}</td>
    <!--<td><a href="/Control/resetuserpass/{{values.id}}" class="btn btn-info">Reset Password</a></td>-->
    <td><a href=" /vehicletype/deleteuser/{{values.id}}" class="btn btn-danger">Delete</a></td>
    <td><a href=" /control/edit/{{values.id}}" class="btn btn-danger">edit</a></td>
</tr>
{% endfor %}
</table>
<a href = "/page/vehicletype"> <em class="fa fa-xl fa-plus-circle color-blue" ></em> </a>
</div>
</div>
{% endblock %}

编辑方法的python代码:

class VehicetypeForm(FlaskForm):
    type=StringField('Type')

    @app.route('/control/edit/<int:id>',methods=['POST','GET','PATCH'])
    def edit(id):
        form = VehicetypeForm(request.form)
        mysql = pymysql.connect("0.0.0.0", "tnxt", "tnxt", "transport")
        cur = mysql .cursor()
        cur.execute('SELECT * FROM vehicletype WHERE id= %s',[id])
        type=cur.fetchall()

         # form.type.data=type

        if request.method=='PATCH' and form.validate():
            #type=form.type.data
            mysql = pymysql.connect("0.0.0.0", "tnxt", "tnxt", "transport")
            cur=pymysql .cursor()
            cur.execute('UPDATE vehicletype SET type=%s WHERE id=%s',(type,id))
            mysql.connection.commit()
            cur.close()
            flash('success')
            return redirect(url_for('vehicle_type'))
        return render_template('vehicletype.html',form=form)

在此 python 代码更新方法不起作用。但是,当我们提供详细信息时,详细信息将添加到数据库中。如何从客户端编辑和更新值。

【问题讨论】:

    标签: python-3.x flask flask-sqlalchemy flask-wtforms flask-restless


    【解决方案1】:

    以下是使用 wtforms 创建表单的好习惯

    class UserForm(Form):
        name = StringField('Name')
        father_name = StringField('Father Name')
        # .... add fields you want
    

    对于字段类型 - 参考这个link

    @app.route('/newuser', methods=['GET', 'POST'])
    def add_user():
        form = UserForm()
        if form.validate_on_submit():
            user_details = {
                name: form.name.data,
                fathername: form.father_name.data,
                # add more fields
            }
            sqlsession.add(user_details)
        return redirect(url_for('page_newuser'))
    return render_template('newuser.html', form=form)
    

    一旦你有了表单,你就可以轻松地编辑你的内容并将其直接保存到数据库中

    @app.route('/control/edituser/<int:id>',method=['post','get'])
    def edit(id):
        qry=sqlsession.query(Enduser).filter(Enduser.id==id).first()
        form = UserForm(request.form, **qry)
        if form.validate_on_submit():
            form.populate_obj(qry)
            sqlsession.update(qry)
            sqlsession.commit()
        return redirect(url_for('page_newuser'))
     return render_template('newuser.html', form=form)
    

    【讨论】:

    • @Falconbliss 我告诉了你烧瓶形式的工作原理。我没有测试过,但这个逻辑会起作用。
    • 一个小疑问,最终用户模型类有外国作为位置。怎么写
    • 使用 wtforms 中的文本字段并使用引导程序获取位置(国家和州选择器)。也许这可以帮助 js.nicdn.de/bootstrap/formhelpers/docs/state.html
    • 使用编辑按钮图像编辑值后不会显示我弄错的地方。请您给出解释或提示。
    • 如何为表单添加验证
    猜你喜欢
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2019-02-22
    • 2016-12-07
    相关资源
    最近更新 更多