Как проверить, генерируется ли пользовательское сообщение об ошибке с помощью abort () во Flask? - PullRequest
0 голосов
/ 01 декабря 2018

Я создаю простое веб-приложение, используя Flask.Для некоторых представлений я выдаю ошибку 403, если определенные условия не соответствуют:

@admin.route("/employees/assign/<int:id>", methods=["GET", "POST"])
@login_required
def assign_employee(id):
    """Assign a department and a role to an employee."""
    check_admin()

    employee = Employee.query.get_or_404(id)

    if employee.is_admin:
        abort(403,f"You're not permitted to edit {employee.first_name}'s role and department.")

    do_something()
    return render_template(a_template)

Для обработки этих ошибок я также добавил обработчики ошибок в свой основной файл инициализации.

@app.errorhandler(403)
def fordbidden(error):
    return (
        render_template(
            "errors/403.html", title="Forbidden", error_message=error.description
        ),
        403,
    )

Наконец, я отображаю описание ошибки в своем шаблоне Jinja:

<div style="text-align: center">
    <h1> 403 Error </h1>
    {% if error_message %}
        <h3> {{error_message}} </h3>
    {% else %}
        <h3>You're not authorised to access this ressource.</h3>
    {% endif %}
    <hr class="intro-divider">
    <a href="{{ url_for('home.homepage') }}" class="btn btn-default btn-lg">
        <i class="fa fa-home"></i>
        Home
    </a>
</div>

Что я хотел бы сделать, это отобразить пользовательское сообщение об ошибке , еслии только если есть один, иначе использовать стандартное сообщение, определенное в моем шаблоне.Однако, похоже, что мой {% if error_message %} всегда будет истинным, потому что ошибка всегда передает сообщение по умолчанию.

Есть ли способ проверить наличие специального сообщения об ошибке?

1 Ответ

0 голосов
/ 01 декабря 2018

Вы можете использовать встроенный по умолчанию фильтр jinja2:

Вы можете заменить структуру if-else на следующую:

<h3>{{error_message|default(“You're not authorised to access this resource.“‚true)}}</h3>
...