【问题标题】:Problems with executing py script on the flask在烧瓶上执行 py 脚本的问题
【发布时间】:2020-03-01 07:24:52
【问题描述】:

感谢您的关注!

我在使用烧瓶执行 .py 脚本时遇到问题。 当我在调用中将所有东西都放在一个“def”中时,我可以将带有 dict 的值直接返回到烧瓶中,然后返回 HTML 页面。但是当我在我的脚本中使用多个'def'时 - 我在外面有'无'。对不起我的英语不好:)

routes.py

import calc_ttv as ct

...

@app.route('/calculate', methods=['GET', 'POST'])
@login_required
def calculate():
    undertitle = 'online web app'
    date_var = request.form['datepicker-input-line']
    if date_var == '':
        flash('Use calendar first!')
        return render_template('calculate_interface.html', undertitle=undertitle)
    time_var = request.form['timepicker-input-line']
    gender_var = request.form['gender-input-line']
    suntime_var = request.form['timepicker-sunrise-input-line']
    naksh_var = request.form['nakshatra-input-line']
    fday = date_var[0:2]
    fmonth = date_var[3:5]
    fyear = date_var[6:10]
    fhour = time_var[0:2]
    fminute = time_var[3:5]
    if gender_var == 'Male':
        fgender = 1
    else:
        fgender = 2
    fnakshatra = naksh_var
    fsunhour = suntime_var[0:2]
    fsunminute = suntime_var[3:5]
    result = ct.ctmainclass.calculateDate(fday, fmonth, fyear, fhour, fminute, fgender, fnakshatra,
                                          fsunhour, fsunminute)
    flash(result)
    return render_template('calculate_interface.html', undertitle=undertitle, date_var=date_var, 
                            time_var=time_var, gender_var=gender_var, suntime_var=suntime_var,
                            naksh_var=naksh_var, result=result)

calc_ttv.py

class ctmainclass(object):

    def calculateDate(fday, fmonth, fyear, fhour, fminute, fgender, fnakshatra, fsunhour, fsunminute):

        global val1
        global val2
        global val3
        global val4
        global val5
        global val6
        global val7
        global val8

        val1 = int(fday)
        val2 = int(fmonth)
        val3 = int(fyear)
        val4 = int(fhour)
        val5 = int(fgender)
        val6 = str(fnakshatra)
        val7 = int(fsunhour)
        val8 = int(fsunminute)

        cttvcl = ctmainclass()

        cttvcl.calculateTime()

    def calculateTime(self):

        global val1
        global val2
        global val3
        global val4
        global val5
        global val6
        global val7
        global val8

        output_text_1 = str('fday: ' + str(val1))
        output_text_2 = str('fmonth: ' + str(val2))
        output_text_3 = str('fyear: ' + str(val3))
        output_text_4 = str('Some text')
        output_text_5 = int(279/63)

        return {'output_var1': output_text_1, 'output_var2': output_text_2,'output_var3': output_text_3,
                'output_var4': output_text_4,
                'output_var5': output_text_5}

calculate_interface.html

{% extends "base.html" %}

{% block content %}
<div class="container">
    {% with messages = get_flashed_messages() %}
    {% if messages %}
    <ul class=flashes>
    {% for message in messages %}
    <li><span style='color: red;'>{{ message }}</span></li>
    {% endfor %}
    </ul>
    {% endif %}
    {% endwith %}
    <h1>MY APP WEB EDITION</h1>
    {% if undertitle %}
    <div class="obj-margin-bottom-for-undertitle-var3">
    <span class="obj-undertitle-span">{{ undertitle }}</span>
    </div>
    {% endif %}
    <div class='col-lg-3 text-center'>
        <form action="/calculate" method="POST">
            <input name='datepicker-input-line' id='datepicker-input-line' type='text'
                         class='datepicker-here obj-picker-line-input form-control'/>
            <input name='timepicker-input-line' class="time obj-picker-line-input form-control"
                         type="text" value="07:30" />
            <select name='gender-input-line' class="obj-picker-line-input form-control"
                          id="gender-input-line">
              <option>Male</option>
              <option>Female</option>
            </select>
            <input name='timepicker-sunrise-input-line' class="time obj-picker-line-input form-control"
                         type="text" value="06:45" />
            <select name='nakshatra-input-line' class="obj-picker-line-input form-control"
                          id="nakshatra-input-line">
              <option>Ashvini</option>
              <option>Bharni</option>
              <option>Krittika</option>
              <option>Rohini</option>
              <option>Mrigashira</option>
            </select>
            <button type="submit" class="btn btn-primary btn-block obj-btn-for-calculate">
             Make some calculations</button>
        </form>
    </div>
    <div class='col-lg-9 text-center'>
        {% if date_var %}
        <div class="obj-undertitle-span">{{ date_var }}</div>
        <div class="obj-undertitle-span">{{ time_var }}</div>
        <div class="obj-undertitle-span">{{ gender_var }}</div>
        <div class="obj-undertitle-span">{{ suntime_var }}</div>
        <div class="obj-undertitle-span">{{ naksh_var }}</div>
        {% endif %}
        <div class="obj-undertitle-span">
        {% if result %}
            {% for obj in result.keys() %}
                {{ result[obj] }}
            {% endfor %}
        {% endif %}
        </div>
    </div>
</div>
{% endblock %}

这毕竟是我得到的:

【问题讨论】:

    标签: python html python-3.x function flask


    【解决方案1】:

    函数calculateDate 没有return 语句,因此函数calculate(在routes.py 中)中的result 变量总是None

    修改 calc_ttv.py 中的calculateDate 以返回您的计算结果:

    return cttvcl.calculateTime()
    

    【讨论】:

    • 我可以为多个'def'一个接一个地做吗?
    • 抱歉无法理解,能发个例子吗?或者您是在谈论在多个函数中使用 return 语句 - 如果是 - 那么是的,它在所有语言中都是允许的。
    • 我的意思是使用类似的东西: def func1(): ... return func2() def func2(): ... return func3() 等等
    • 是的,这是允许的,但会要求您遵循正确的编码实践。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-03-19
    • 2020-07-02
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 2013-06-04
    • 1970-01-01
    相关资源
    最近更新 更多