AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题

问题[flask](coding)

Martin Hope
Doug Conran
Asked: 2025-02-14 22:49:29 +0800 CST

无法在 systemd 下运行 myproject.service

  • 6

我正在按照这个(非常好的)DigitalOcean 教程了解如何使用 Gunicorn 提供 Flask 应用程序,但无法让 Systemd 运行myproject.service。

我创建了一个 python 环境 (venv),pip 安装了 gunicorn 和 flask,编写了 myproject.py 和 wsgi.py,并检查所有程序是否可执行。当我运行以下命令时:

(venv) dconran@dconran-VirtualBox:~/python/dg$ /home/dconran/python/dg/venv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi:app

从命令行,无论是在 Python 环境中还是在停用后,一切都运行正常,我可以访问网页。但是当我运行sudo systemctl start myproject

当我这样做时,我收到以下错误消息sudo systemctl status myproject:

× myproject.service - Gunicorn instance to serve myproject
 Loaded: loaded (/etc/systemd/system/myproject.service; enabled; preset: enabled)
 Active: failed (Result: exit-code) since Fri 2025-02-14 12:40:11 GMT; 23s ago
 Duration: 12ms
 Main PID: 6526 (code=exited, status=2)
    CPU: 5ms

Feb 14 12:40:11 dconran-VirtualBox systemd[1]: Started myproject.service - Gunicorn instance to serve myproject.
Feb 14 12:40:11 dconran-VirtualBox bash[6527]: 
    /home/dconran/python/dg/venv/bin/gunicorn: line 3: import: command not found
Feb 14 12:40:11 dconran-VirtualBox bash[6528]: 
    /home/dconran/python/dg/venv/bin/gunicorn: line 4: import: command not found
Feb 14 12:40:11 dconran-VirtualBox bash[6529]: 
    /home/dconran/python/dg/venv/bin/gunicorn: line 5: from: command not found
Feb 14 12:40:11 dconran-VirtualBox bash[6526]: 
    /home/dconran/python/dg/venv/bin/gunicorn: line 7: syntax error near unexpected token `('
Feb 14 12:40:11 dconran-VirtualBox bash[6526]: 
    /home/dconran/python/dg/venv/bin/gunicorn: line 7: `    sys.argv[0] = re.sub(r'(-script\.>
Feb 14 12:40:11 dconran-VirtualBox systemd[1]: myproject.service: Main process exited, 
    code=exited, status=2/INVALIDARGUMENT
Feb 14 12:40:11 dconran-VirtualBox systemd[1]: myproject.service: Failed with result 
    'exit-code'.

myproject.service包括:-

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target
[Service]
User=dconran
Group=www-data
WorkingDirectory=/home/dconran/python/dg
Environment="PATH=/home/dconran/python/dg/venv/bin"
ExecStart=/usr/bin/bash /home/dconran/python/dg/venv/bin/gunicorn --workers 3 --bind 
    unix:myproject.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target

我已经确认 python3 和 gunicorn 都在 ...venv/bin 中,并且事实上,从命令行运行时 gunicorn 确实可以正常运行 - 那么为什么它不能通过 systemd 运行呢?

如有任何帮助/建议,我们将不胜感激。

flask
  • 1 个回答
  • 20 Views
Martin Hope
Anas Limem
Asked: 2024-12-20 21:35:59 +0800 CST

jinja2 和 flask 问题

  • 1
{% extends 'base.html' %}
{% block head %}
<title>Task Master</title>
{% endblock %}
{% block body %}
<div class="content">
    <h1>Task Master</h1>
    {% if tasks|length < 1 %}
    <h4 style="text-align: center">There are no tasks. Create one below!</h4>
    {% else %}
    <table class="center">
        <tr>
            <th>Task</th>
            <th>Added</th>
            <th>Action</th>
        </tr>
        {% for task in tasks %}
            <tr>
            <td> {{ task.content }}</td>
            <td> {{ task.date_created.date()}}</td>
            <td>
                <a href="/delete/{{task.id}}">Delete</a>
                <br>
                <a href="/update/{{task.id}}">Update</a>
            </td>
            </tr>
        {% endfor %}
    </table>
    {% endif %}
    <hr width="100%">
    <form action="/" method="post">
        <input type="text" name="content" id="content"></input>
        <input type="submit" value="Add Task"></input>
    </form>
</div>
{% endblock %}

大家好,我的代码中有一个问题,如果用户没有写任何任务,即使我正在执行 if else 语句,它也可以存储为任务,我不知道是否有任何解决方案

flask
  • 1 个回答
  • 26 Views
Martin Hope
Tim Payne
Asked: 2024-12-17 02:47:24 +0800 CST

如何在使用小部件时更新表单值

  • 5

我正在构建一个非常简单的颜色输入表单,并使用内置的 wtforms 小部件。这只会显示颜色选择器,不允许输入文本,但我想让用户能够输入任何文本。所以我创建了另一个仅包含文本值的字段。

当其他输入发生变化时,我该如何更新我的颜色/color1 字段?我看不出将“事件”附加到表单条目的任何方法。我对 Python/Flask/WTForms/Jinja 还很陌生,所以解决方案可能很明显,但我无法解决!

这是我的简单表单类

class UserInput(FlaskForm):
  color = StringField('color', default="#00ff00")
  color1 = StringField('color1', widget=widgets.ColorInput(), default='#00ff00')
  submit = SubmitField('Go')

这是我的 html 代码

<form action="" method="post">
     <p>
      {{form.color1.label}} <br>
      {{form.color}} {{form.color1}}
     </p>
     <p>
      {{form.submit()}}
     </p>
   </form>
flask
  • 1 个回答
  • 15 Views
Martin Hope
user26782974
Asked: 2024-08-13 03:13:36 +0800 CST

Flask 和 Fetch() - 继续加载新的空白 html 而不是更新当前页面

  • 5

我正在尝试使用 Python 和 Flask 编写基于文本的 Pokemon 游戏。我希望用户能够通过单击网页上的按钮来选择他们的 Pokemon,这个 user_pokemon_name 变量将被发送到后端,然后使用有关 Pokemon 的各种统计数据更新网页。然后游戏将继续,并显示新按钮和新消息。

我面临的问题是,一旦用户单击按钮,就会在相同的 URL 处加载一个新的 HTML 页面,并在正文中包含响应。

这是我的 app.py 代码:

from flask import Flask, render_template, request

app = Flask(__name__ ,
            static_url_path='',
            static_folder='../frontend/static',
            template_folder='../frontend/templates')

@app.route("/battle")
def battle_page():
    return render_template('battle.html')

@app.route("/battle", methods=['POST'])
def get_user_choice():
    user_pokemon_name = request.form['userPokemonChoice']
    print(user_pokemon_name)
    user_choice = f"You have chosen {user_pokemon_name.capitalize()}."
    return user_choice

这是我的 battle.html 代码:

<body>
        <section id= "userPokemonChoice">
            <p>Now, which Pokemon do you want? The three available Pokemon are Bulbasaur, Charmander, and Squirtle.</p>
            <form class = "userinput" method ="POST" action="/battle" id = "form"> 
                <button type = "submit" name = "userPokemonChoice" value="bulbasaur" id="choosePokemon" onclick="getUserChoice()">Bulbasaur</button>
                <button type = "submit" name = "userPokemonChoice" value="charmander" id="choosePokemon" onclick="getUserChoice()">Charmander</button>
                <button type = "submit" name = "userPokemonChoice" value="squirtle" id="choosePokemon" onclick="getUserChoice()">Squirtle</button>    
            </form>
        </section>

        <section id="stats"></section>

这是我的 battle.js 代码

// const form = document.getElementById('form')
// form.addEventListener('submit', (e) => {
//     e.preventDefault()
//     
// })


function getUserChoice() {
    const url = 'http://127.0.0.1:5001/battle'
    fetch(url)
    .then(response => response)  
    .then(data => {
        
        console.log(data.text);
        document.getElementById("stats").innerHTML = data
    })    
}

当我按原样运行代码时,显示以下屏幕:

带有响应的空白 HTML 页面

如果我取消注释表单事件监听器,我会收到一个 [object Response],我希望看到响应: object Response

任何帮助都将非常感激--我一直为此而烦恼!

flask
  • 1 个回答
  • 28 Views
Martin Hope
Artistica Digital
Asked: 2024-07-06 01:41:25 +0800 CST

如何在 WTForms FieldList 中使用 FileField?使用 Flask-WTF 实现 FileField

  • 5

我已经使用 WTForms FieldList、宏和 Javascript 创建了动态字段。

使用此代码验证许多字段(StringField、SelectField 等),我可以动态添加许多字段,它们会验证和更新我的 Sqlite3 数据库。但是我现在希望能够动态添加文件。

文件上传的标准 Flask-WTF 代码如下所示:如何利用它对 FieldList 表单进行验证?

 if form.validate_on_submit():
    f_fileA = form.inputname.data
    filename_fileA = secure_filename(f_fileA.filename)
    f_fileA.save(os.path.join(
    UPLOAD_FOLDER, filename_fileA
    ))

我的代码 表格

forms.py

class ChildForm(Form):
    childAinput_1 = StringField(
        'ChildA input 1'
    )
    childAinput_2 = IntegerField(
        'ChildA input 2'
    )
    category = SelectField(
        'Category',
        choices=[('cat1', 'Category 1'), ('cat2', 'Category 2')]
    )
    fileA = FileField(
        'FileA'
    )


class MainForm(FlaskForm):
    parentinput_1 = StringField(
        'Parent input 1'
    )
    parentinput_2 = StringField(
        'Parent input 2'
    )
    childrenA = FieldList(
        FormField(ChildForm),
        min_entries=1,
        max_entries=20
    )


我的带有表单字段的 HTML 模板

form.html template

<a id="add" href="#">Add ChildA</a>
{# Show all subforms #}
        <form id="childA-form" action="" method="POST" role="form">
            {{ form.hidden_tag() }}

            {# show parents fields #}
            <div>
            {{ form.parentinput_1.label }}
            {{ form.parentinput_1 }}
        </div>
        <div>
            {{ form.parentinput_2.label }}
            {{ form.parentinput_2 }}
        </div>

            <div id="subforms-container">
                {% for subform in form.childrenA %}
                    {{ macros.render_childA_form(subform, loop.index0) }}
                {% endfor %}
            </div>

            <button type="submit">Send</button>
        </form>

        {% if form.errors %}
            {{ form.errors }}
        {% endif %}

        {# Form template #}
        {{ macros.render_childA_form(_template, '_') }}

当前表单验证(尚未添加文件上传)

routes.py

@bp.route('/', methods=['GET', 'POST'])
def index():
    form = MainForm()
    template_form = ChildForm(prefix='childrenA-_-')

    if form.validate_on_submit():
        # Create parent
        new_parent = Parent(
            parentinput_1 = form.parentinput_1.data,
            parentinput_2 = form.parentinput_2.data
        )

        db.session.add(new_parent)

        for childAe in form.childrenA.data:

            new_childA = ChildA(**childAe)

            # Add to parent
            new_parent.childrenA.append(new_childA)

        db.session.commit()

    return render_template(
        'index.html',
        form=form,
        _template=template_form
    )

如果有用的宏是:

macros.html

{%- macro render_childA_form(subform, index) %}
        <div id="childA-{{ index }}-form" class="{% if index != '_' %}subform{% else %}is-hidden{% endif %}" data-index="{{ index }}">
            <div>
                {{ subform.childAinput_1.label }}
                {{ subform.childAinput_1 }}
            </div>
            <div>
                {{ subform.childAinput_2.label }}
                {{ subform.childAinput_2}}
            </div>
            <div>
                {{ subform.category.label }}
                {{ subform.category }}
            </div>
            <div>
                {{ subform.fileA.label }}
                {{ subform.fileA }}
            </div>
    
            <a class="remove" href="#">Remove</a>
            <hr/>
        </div>
    {%- endmacro %}

我的模特

models.py
class Parent(db.Model):
    """Stores parents."""
    __tablename__ = 'parents'
    parentinput_1 = db.Column(db.String(100))
    parentinput_2 = db.Column(db.String(100))

    id = db.Column(db.Integer, primary_key=True)


class ChildA(db.Model):
    """Stores childrenA of a parent."""
    __tablename__ = 'childrenA'

    id = db.Column(db.Integer, primary_key=True)
    parent_id = db.Column(db.Integer, db.ForeignKey('parents.id'))

    childAinput_1 = db.Column(db.String(100))
    childAinput_2 = db.Column(db.Integer)
    category = db.Column(db.String(4))
    fileA = db.Column(db.String(255))

    # Relationship
    parent = db.relationship(
        'Parent',
        backref=db.backref('childrenA', lazy='dynamic', collection_class=list)
    )



(模型、路线和表格实际上在一个文件中,但为了便于阅读,我在问题中将它们分开)

非常感谢

flask
  • 1 个回答
  • 24 Views
Martin Hope
john swanson
Asked: 2024-01-27 08:46:41 +0800 CST

Spotipy 应用程序使用我的个人资料而不是最终用户

  • 6

我正在使用 Flask 创建 Spotify 应用程序,并在获取最终用户数据时遇到问题。我的出现了,而不是他们的。他们的文档没有帮助,这里的其他解决方案对我不起作用。

这是我的烧瓶代码:

@app.route('/authenticate')
def authentication():
    sp_oauth = create_spotify_oauth()
    auth_url = sp_oauth.get_authorize_url()
    return redirect(auth_url)

@app.route('/redirectPage')
def redirectPage():
    sp_oauth = create_spotify_oauth()
    code = request.args.get('code')
    token_info = sp_oauth.get_access_token(code)
    session[TOKEN_INFO] = token_info
    return redirect(url_for('playlist_or_album'))

和我的 Spotify oauth 函数:

def create_spotify_oauth():
    return SpotifyOAuth(
        client_id=CLIENT_ID,
        client_secret=CLIENT_SECRET,
        redirect_uri=url_for('redirectPage', _external=True),
        scope='playlist-modify-public'
    )

我搜索了错误日志和其他授权方法。这适合我的需要,我不想改变。没有错误,我只是无法追踪为什么它会登录我而不是其他用户。

flask
  • 1 个回答
  • 19 Views
Martin Hope
severusDude
Asked: 2023-11-16 00:38:02 +0800 CST

Flask 在返回重定向时不断重复请求

  • 6

返回重定向时请求不断重复。

我制作了一个按钮来发送删除请求,它将使用键“order_list”删除会话数据,但它会继续进行重定向,直到浏览器停止为止

重定向不断重复

cart_order.html

<script>
  function clearQuery() {
    fetch("/cart", {
      method: "DELETE",
      headers: {
        "Content-Type": "application/json",
      },
    })
      .then((response) => {
        if (response.ok) {
          return response.json();
        }
        throw new Error("Network response was not ok.");
      })
      .then((data) => {
        console.log("All orders have been deleted");
      })
      .catch((error) => {
        console.error("Error deleting orders", error);
      });
  }
</script>
<button onclick="clearQuery()">Clear Query</button>

烧瓶

from flask import Flask, render_template, redirect, url_for, session, request

app = Flask(__name__)
app.secret_key = 'THIS_IS_SECRET_KEY'


@app.route('/cart', methods=["GET", "DELETE"])
def cart():

    # for demonstration
    session['order_list'] = {
        'order_1': {
            'marker': True,
            'color': 'blue'
        },
        'order_2': {
            'marker': True,
            'color': 'red'
        },
        'order_3': {
            'marker': True,
            'color': 'blue'
        }
    }

    if request.method == "GET":
        if 'order_list' in session:
            print(session['order_list'])
        else:
            print(session)

        return render_template('cart_order.html')

    elif request.method == "DELETE":

        session.pop('order_list')
        session.modified = True

        return redirect(url_for('cart'))


if __name__ == "__main__":
    app.run(debug=True)

我希望删除带有“order_list”键的会话数据,然后使用 GET 请求重定向回自身,并打印现在应该为空的会话

flask
  • 1 个回答
  • 38 Views
Martin Hope
Mikhail Sergievskiy
Asked: 2023-10-30 02:30:12 +0800 CST

Flask render_template() 不会在请求中发送上下文参数

  • 5

我正在开发一个应用程序,我想发送一些参数以正确渲染页面。

这是我的烧瓶代码:

@app.get('/main')
def interface():
    if True:  # here supposed to be a function to check authorization
        s = 'HELLO'  # for testing purposes I hardcode the dummy parameter
        return render_template('main.html', sid=s)
    return redirect('/')  # if not authorized, move home

当我运行应用程序并尝试打开 127.0.0.1:5000/main 时,该参数未传递。我可以在开发者控制台中看到它:

在此输入图像描述

但是,如果我手动写入地址,例如 127.0.0.1:5000/main?sid=HELLO,我会看到以下内容:

在此输入图像描述

我究竟做错了什么?

flask
  • 1 个回答
  • 13 Views
Martin Hope
ScotterMonkey
Asked: 2023-08-22 01:30:46 +0800 CST

使用 Flask Sessions,我是否需要显式创建/更改/删除 cookie?

  • 5

我对与 Flask 会话(以下简称“会话”)相关的 cookie 感到困惑。我确实了解会话如何依赖客户端 cookie。我的问题是,当我们创建/更改/弹出会话变量的值时,是否会在用户浏览器上自动创建/设置 cookie,或者我是否还需要显式管理 cookie 来与该会话变量一起使用?

        session.permanent = True
        session["t_id_user"] = t_id_user
        # Is the following code needed?
        C = make_response("")
        cookie_expires = datetime.now() + timedelta(days=30)
        C.set_cookie("t_id_user", str(t_id_user), expires=cookie_expires)

谢谢你!

flask
  • 1 个回答
  • 12 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve