405错误:请求的网址不允许使用该方法

乔安娜

我一直在尝试为我的网站编码重置密码。但是,我继续遇到405错误。Google说这很可能是客户端错误,但我认为我的html很好。我不确定还有什么可能导致该错误。

我曾尝试测试不包含内容的url,但这也不起作用。

route.py

def send_reset_email(user):
    token = user.get_reset_token()
    msg = Message('Password Reset Request', sender='[email protected]', recipients=[user.email])
    msg.body = f'''To reset your password, visit the following link:
{url_for('reset_token', token=token, _external=True)}

If you did not make this request then simply ignore this email and no change will be made.
'''
    mail.send(msg)

@users.route('/reset_request', methods=['GET, POST'])
def reset_request():
    if current_user.is_authenticated:
        return redirect(url_for('main.home'))
    form = RequestResetForm()
    if form.validate_on_submit():
        user = User.query.filter_by(email=form.email.data).first()
        send_reset_email(user)
        flash('An email has been sent with instructions to reset your password', 'info')
        return redirect(url_for('users.login'))
    return render_template('reset_request.html', title='Reset Password', form=form)

@users.route('/reset_password/<token>', methods=['GET, POST'])
def reset_token(token):
    if current_user.is_authenticated:
        return redirect(url_for('main.home'))
    user = User.verify_reset_token(token)
    if user is None:
        flash('That is an invalid or expired token', 'warning')
        return redirect(url_for('reset_request'))
    form = ResetPasswordForm()
    if form.validate_on_submit():
        hashed_password = bcrypt.generate_password_hash(form.password.data).decode('utf-8')
        user.password = hashed_password
        db.session.commit()
        flash(f'Your password has been updated, you are now able to log in!', 'success')
        return redirect(url_for('users.login'))
    return render_template('reset_token.html', title='Reset Password', form=form)

表格

class RequestResetForm(FlaskForm):
    email = StringField('Email', 
        validators=[DataRequired(), Email()],
        render_kw={"placeholder":"Enter Email"})
    submit = SubmitField('Request Password Reset')

    def validate_email(self, email):
        user = User.query.filter_by(email=email.data).first()     
        if user is None:
            raise ValidationError('There is no account with that email. You must register first.')

class ResetPasswordForm(FlaskForm):
    password = PasswordField('Password', 
        validators=[DataRequired(), EqualTo('confirm_password', message='Passwords Must Match')],
        render_kw={"placeholder":"Create Password"})
    confirm_password = PasswordField('Confirm Password', 
        validators=[DataRequired(), EqualTo('password', message='Passwords Must Match')],
        render_kw={"placeholder":"Confirm Password"})
    submit = SubmitField('Reset Password')

models.py

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    firstname = db.Column(db.String(15), nullable=False)
    lastname = db.Column(db.String(15), nullable=False)
    email = db.Column(db.String(60), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    role = db.Column(db.Integer(), nullable=False, default=ROLES['student'])
    clubs = db.relationship('Club', secondary=user_club_assoc_table)

    def get_reset_token(self, expires_sec=1800):
        s = Serializer(app.config['SECRET_KEY'], expires_sec)
        return s.dumps({'user_id': self.id})

    @staticmethod
    def verify_reset_token(token):
        s = Serializer(app.config['SECRET_KEY'])
        try:
            user_id = s.loads(token)['user_id']
        except:
            return None
        return User.query.get(user_id)

    def __repr__(self):
        return f'{self.firstname} {self.lastname}'

login.html

{% extends "layout.html" %}
{% block content %}
<h1>Login Page</h1>
<div class="content-section">
    <form method="POST" action="">
        {{ form.hidden_tag() }}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">Login</legend>
            ...(irrelevant content)
<div class="border-top pt-3">
    <small class="text-muted">
        <a class="ml-2" href="{{ url_for('users.register') }}">Don't Have An Account?</a>
    </small>
    <small class="text-muted ml-2">
        <a class="ml-2" href="{{ url_for('users.reset_request') }}">Forgot Password?</a>
    </small>
</div>
{% endblock content %}

比托·本尼汉(Bitto Bennichan)

这是一个简单的错误。不是methods=['GET, POST']

改成

methods=['GET', 'POST']

文件

HTTP方法

Web应用程序在访问URL时使用不同的HTTP方法。在使用Flask时,您应该熟悉HTTP方法。默认情况下,路由仅回答GET请求。您可以使用route()装饰器的methods参数来处理不同的HTTP方法。

from flask import request

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Web API放置请求生成Http 405方法不允许错误

来自分类Dev

POST请求的Java Servlet返回错误405(不允许使用方法)

来自分类Dev

Flask错误:“不允许使用方法所请求的URL不允许使用该方法”

来自分类Dev

CORS 405(不允许使用方法)

来自分类Dev

405不允许使用方法

来自分类Dev

@PUT球衣错误405:不允许使用方法

来自分类Dev

尝试发布AJAX请求时的POST 405(不允许使用方法)-Laravel 4

来自分类Dev

所请求的URL不允许使用该方法。在烧瓶

来自分类Dev

错误域= AFNetworkingErrorDomain代码= -1011“请求失败:方法不允许(405)”

来自分类Dev

选项405(不允许使用方法)

来自分类Dev

状态码405(不允许使用方法)

来自分类Dev

不允许使用HTTP 405方法

来自分类Dev

405不允许使用的方法Web API 2

来自分类Dev

Flask-POST-请求的网址不允许使用该方法

来自分类Dev

ASP.NET WebApi:不允许使用(405)方法

来自分类Dev

(405)不允许使用方法。WCF Web服务

来自分类Dev

405方法不允许-使用Google App Engine(Python语言)获取请求

来自分类Dev

405(不允许使用方法),并被CORS策略阻止

来自分类Dev

不允许的方法:所请求的URL不允许使用该方法

来自分类Dev

NGINX返回405不允许使用POST方法

来自分类Dev

不允许使用Flask 405方法

来自分类Dev

405不允许使用Spring的方法

来自分类Dev

@PUT球衣错误405:不允许使用方法

来自分类Dev

所请求的URL不允许使用该方法。在烧瓶

来自分类Dev

不允许的方法-所请求的URL不允许使用该方法

来自分类Dev

代号一:405方法不允许错误

来自分类Dev

POST 方法错误 HTTP 405(方法不允许)

来自分类Dev

请求的 URL 不允许使用该方法

来自分类Dev

使用 Windows 服务中托管的 WCF 服务的 Winform 出现错误 #405(方法不允许 e)

Related 相关文章

  1. 1

    Web API放置请求生成Http 405方法不允许错误

  2. 2

    POST请求的Java Servlet返回错误405(不允许使用方法)

  3. 3

    Flask错误:“不允许使用方法所请求的URL不允许使用该方法”

  4. 4

    CORS 405(不允许使用方法)

  5. 5

    405不允许使用方法

  6. 6

    @PUT球衣错误405:不允许使用方法

  7. 7

    尝试发布AJAX请求时的POST 405(不允许使用方法)-Laravel 4

  8. 8

    所请求的URL不允许使用该方法。在烧瓶

  9. 9

    错误域= AFNetworkingErrorDomain代码= -1011“请求失败:方法不允许(405)”

  10. 10

    选项405(不允许使用方法)

  11. 11

    状态码405(不允许使用方法)

  12. 12

    不允许使用HTTP 405方法

  13. 13

    405不允许使用的方法Web API 2

  14. 14

    Flask-POST-请求的网址不允许使用该方法

  15. 15

    ASP.NET WebApi:不允许使用(405)方法

  16. 16

    (405)不允许使用方法。WCF Web服务

  17. 17

    405方法不允许-使用Google App Engine(Python语言)获取请求

  18. 18

    405(不允许使用方法),并被CORS策略阻止

  19. 19

    不允许的方法:所请求的URL不允许使用该方法

  20. 20

    NGINX返回405不允许使用POST方法

  21. 21

    不允许使用Flask 405方法

  22. 22

    405不允许使用Spring的方法

  23. 23

    @PUT球衣错误405:不允许使用方法

  24. 24

    所请求的URL不允许使用该方法。在烧瓶

  25. 25

    不允许的方法-所请求的URL不允许使用该方法

  26. 26

    代号一:405方法不允许错误

  27. 27

    POST 方法错误 HTTP 405(方法不允许)

  28. 28

    请求的 URL 不允许使用该方法

  29. 29

    使用 Windows 服务中托管的 WCF 服务的 Winform 出现错误 #405(方法不允许 e)

热门标签

归档