尝试更新条目但出现错误“错误的请求浏览器或代理发送了该服务器无法理解的请求”

如何解决尝试更新条目但出现错误“错误的请求浏览器或代理发送了该服务器无法理解的请求”

我是python和Flask的新手,我在更新字段条目时遇到问题,我可以在用户个人资料中添加2个字段并将数据保存到其用户页面,也可以删除该条目,但是在尝试更新“提示”字段时,它以“错误请求”错误的形式返回;文件是:

app.py:

from flask import Flask,render_template,request,redirect,url_for,flash
from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField,PasswordField
from flask_sqlalchemy import SQLAlchemy
from forms import RegistrationForm,LoginForm,InstrumentForm,IdeasForm
from werkzeug.urls import url_parse
from werkzeug.security import generate_password_hash,check_password_hash
from wtforms import StringField,SubmitField
from wtforms.validators import ValidationError,DataRequired,Email,EqualTo,Length
from flask_login import LoginManager,UserMixin,current_user,login_user,logout_user,login_required
from flask_bootstrap import Bootstrap


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///Mix_Tips.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config["TEMPLATES_AUTO_RELOAD"] = True
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = 'login'


class User(db.Model,UserMixin):
    id = db.Column(db.Integer,primary_key= True)
    username = db.Column(db.String(15),index =True,unique = True)
    email = db.Column(db.String(150),index = True,unique = True)
    password_hash = db.Column(db.String(200))
    idea = db.relationship('Ideas',backref='author',lazy='dynamic')


    def __repr__(self):
        return '<User {}>'.format(self.username)
        return '<N'

    def set_password(self,password):
        self.password_hash = generate_password_hash(password)

    def check_password_hash(self,password):
        return check_password_hash(self.password_hash,password)


class Tips(db.Model):
    Instrument = db.Column(db.String(50),primary_key = True)
    Frequency_Boost = db.Column(db.String(200),unique=True)
    Frequency_Cut = db.Column(db.String(200),unique = True)
    Advice = db.Column(db.String(500))

class Ideas(db.Model):
    id = db.Column(db.Integer,primary_key = True)
    Instrument = db.Column(db.String(50))
    Tips = db.Column(db.String(200))
    user_id = db.Column(db.Integer,db.ForeignKey('user.id'))

    def __repr__(self):
        return '<Tricks {}>'.format(self.Tips)


    
@app.route('/',methods=["GET","POST"])
def login():
  form = LoginForm()
  if form.validate_on_submit():
    user = User.query.filter_by(username=form.username.data).first()
    if user and user.check_password_hash(form.password.data):
      login_user(user,remember=form.remember_me.data)
      return redirect(url_for('user',username = form.username.data))
    if user is None or not user.check_password_hash(form.password.data):
      flash('Invalid username or password')
  return render_template('login.html',form=form)

@app.route('/register',"POST"])
def register():
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(username=form.username.data,email=form.email.data)
        user.set_password(form.password.data)
        db.session.add(user)
        db.session.commit()
        flash('Congratulations,you are now a registered user!')
        return redirect(url_for('login'))
    return render_template('register.html',title='Register',form=form)


@app.route('/user/<username>',"POST"])
@login_required
def user(username):
    user = current_user
    user = User.query.filter_by(username=user.username).first()
    idea = Ideas.query.filter_by(user_id=user.id)
    if idea is None:
        idea = []
    form = IdeasForm()
    if request.method == 'POST' and form.validate():
        New_Idea = Ideas(Instrument = form.Instrument.data,Tips = form.Tips.data,user_id=current_user.id)
        db.session.add(New_Idea)
        db.session.commit()
        print(request.form.get('Tips'))
    return render_template('user.html',user=user,form=form,idea=idea)



@app.route('/update/<int:id>',methods=['POST','GET'])
def update(id):
    tip_to_update = Ideas.query.get_or_404(id)
    if request.method == 'POST':
        tip_to_update.Tips = request.form['Tips']
        db.session.commit()
        return redirect(url_for('user',username=current_user))
    else:
        return render_template('update.html',tip_to_update=tip_to_update)


@app.route('/delete/<int:id>')
def delete(id): 
    idea_to_delete = Ideas.query.get_or_404(id)
    try:
        db.session.delete(idea_to_delete)
        db.session.commit()
        return redirect(url_for('user',username=current_user))
    except:
        return "Problem Deleting"


@login_manager.user_loader
def load_user(id): 
    return User.query.get(int(id))


@app.route('/logout')
def logout():
    logout_user()
    return redirect(url_for('login'))



**user.html:**

{% extends 'base.html' %}

{% block content %}

<center><h1 style="color:rgb(41,15,135)">Welcome back {{current_user.username }}!</h1></center>
<center><h2 style="color:rgb(41,135)">Music Mixing Guide</h2></center>
<h3 style="color:rgb(69,67,67)">Add your Instrument and Specific Tips for Mixing below:</h3>
<form action="user" method='POST'>
    {{ form.hidden_tag() }}
<p 
    style="color:rgb(52,52,52)">{{form.Instrument.label}} <br>
    {{form.Instrument(size=30)}} 

</p>
<p
    style="color:rgb(52,52)">{{form.Tips.label}} <br>
    {{form.Tips(size=80)}}
</p>

<p> <input class="btn btn-outline-dark" type="submit" value="Add"></p>

</form>

<br>

    <h3>Your Music Mixing Tips</h3>
    {% for tricks in idea %}
        <ol>
            <li><p style="color:rgb(41,135)"> <b><h5>Instrument:</h5></b> {{tricks.Instrument}}</li>
                <p style="color:rgb(41,135)"> <b><h5>Tip:</h5></b> {{tricks.Tips}}
        </ol>
                <p></p> <a href="/update/{{ tricks.id }}" class=" btn btn-outline-secondary btn-sm">Update</a>
                 <a href="/delete/{{ tricks.id }}" class=" btn btn-outline-danger btn-sm">Delete</a>
                <br>
       
    {% endfor %}





<br>
<br>
<br>

<a href="{{ url_for('logout') }}" class="btn btn-dark btn-sm">Log Out</a>




{% endblock %}


**update.html:**

{% extends 'base.html' %}

{% block content %}

<div class='container'></div>
  <h2>Update Mix Tip</h2>
  <br>

  <form action="/update/{{tip_to_update.id}}" method="POST">
    <input type="text" placeholder="Tip" Tips="Tips" class="form-control" value="{{tip_to_update.Tips}}"> <br> <br>
    <input type="submit" value="Update" class="btn btn-secondary btn-sm">
    
  </form>


</div> 
{% endblock %} 


**forms.py**

from flask_wtf import FlaskForm
from wtforms import StringField,PasswordField,BooleanField,SelectField
from wtforms.validators import ValidationError,Length
from flask_sqlalchemy import SQLAlchemy 


class RegistrationForm(FlaskForm):
    username=StringField('Username',validators=[DataRequired(),Length(min=4,max=15)])
    email=StringField('Email',Email(message='Invalid Email'),Length(max=150)])
    password=PasswordField('Password',max=150)])
    Repeat_password=PasswordField('Repeat Password',EqualTo('password')])
    submit=SubmitField('Register')
 

class LoginForm(FlaskForm):
    username=StringField('Username',max=15)])
    password=PasswordField('Password',max=150)])
    remember_me=BooleanField('Remember Me')
    submit=SubmitField('Sign In')


class InstrumentForm(FlaskForm):
    Instrument= SelectField('Instrument',choices=[('Voice'),('Acoustic Guitar'),('Electric Guitar'),('Bass Guitar'),('Piano'),('Bass Drum'),('Snare Drum'),('HiHats'),('Toms'),('Cymbals'),('Brass')])

class IdeasForm(FlaskForm):
    Instrument = StringField('Instrument')
    Tips = StringField('Tips')
    submit= SubmitField('Add')   


    def validate_username(self,username):
        user = User.query.filter_by(username=username.data).first()
        if user is not None:
            raise ValidationError('Please use a different username.')

    def validate_email(self,email):
        user = User.query.filter_by(email=email.data).first()
        if user is not None:
            raise ValidationError('Please use a different email address.')

我认为这可能与app.py中的“ request.form ['Tips']行有关,但我想确定并知道如何解决它。

谢谢

解决方法

欢迎使用Mac。我不确定错误消息,但是据我所知,您将需要重新处理数据库模型,以精确化您的关系。这是一个示例:

class Ideas(db.Model):
    id = db.Column(db.Integer,primary_key = True)
    instrument = db.Column(db.String(50))
    tips = db.relationship("Tips",lazy="dynamic")
    user_id = db.Column(db.Integer,db.ForeignKey('user.id'))

看看文档:{​​{3}}

我也推荐来自Miguel Grinberg的这个烧瓶大型教程:https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world

,

感谢您的建议,我终于找到了问题所在,更新路由中的“ tip_to_update.Tips = request.form ['Tips']”行应改为“ tip_to_update.Tips = form.Tips.data” ,因为我使用了Flask Form方法在我的注册路线中收集数据,所以它不接受request.form方法。当用户想要更新提示时,我仍然无法显示在占位符中输入的数据,它会打开带有空白占位符字段的更新页面以进行更新,但是我希望输入的提示中的文本显示为,所以用户可以进行一些更改,而不必再次键入整个提示。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-