Python 烧瓶重构
我正在尝试在Flask中创建一个web项目。简而言之,它是一个HTML/CSS站点,您可以在其中输入一些数据,并显示矩形的面积或周长 我的问题是,对于周长和面积部分,我几乎重复了相同的代码。我已经设法在另一个.py文件(web_rectangle.py)中进行输入验证和计算,但现在我被卡住了 以下是两个输入HTML文件之一(它们几乎完全相同): web_rectangle.py:Python 烧瓶重构,python,flask,refactoring,Python,Flask,Refactoring,我正在尝试在Flask中创建一个web项目。简而言之,它是一个HTML/CSS站点,您可以在其中输入一些数据,并显示矩形的面积或周长 我的问题是,对于周长和面积部分,我几乎重复了相同的代码。我已经设法在另一个.py文件(web_rectangle.py)中进行输入验证和计算,但现在我被卡住了 以下是两个输入HTML文件之一(它们几乎完全相同): web_rectangle.py: #This script is for WEB use only. #It is used by another s
#This script is for WEB use only.
#It is used by another script calling its funtions.
def rect_area(length, width):
return length * width
def rect_circ(length, width):
return 2 * length + 2 * width
def test_val(val):
try:
val = float(val)
if val <= 0:
error = 'Indtast et tal større end 0'
else:
error = ''
except ValueError:
error = 'Fejl i indtastning'
return val, error
#此脚本仅供WEB使用。
#它被另一个调用其函数的脚本使用。
定义矩形区域(长度、宽度):
返回长度*宽度
def rect_circ(长度、宽度):
返回2*长度+2*宽度
def测试值(val):
尝试:
val=浮动(val)
如果val如果我没有错,那么您希望通过消除代码重复来使代码更加模块化。在这里,你可以从蓝图中获得大部分
您可以编写一个公共形状_input.py并为其定义一个方法(def)。圆或矩形可以作为参数传递给def。这样,您将消除重复的代码。而调用不同的HTML模板(视图)可能会有帮助
希望这有帮助
from flask import Flask, render_template, request
from web_rectangle import rect_area, rect_circ, test_val
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/rect_circ')
def circ_input():
#Inputs from web
length = request.args.get('length')
width = request.args.get('width')
#Predefined values
error_l = ''
error_w = ''
input_text = '''Indtast værdierne for længde og bredde. Du må kun bruge tal.
Brug punktum i stedet for komma før decimaltal.'''
input_error = '''Brug kun tal større end nul og punktum i stedet for komma
før decimaltal.'''
#Test length and width for valid inputs
if length and width:
return_val_l = test_val(length)
length = return_val_l[0]
error_l = return_val_l[1]
return_val_w = test_val(width)
width = return_val_w[0]
error_w = return_val_w[1]
#Test length for valid inputs when width == ''
elif length:
return_val_l = test_val(length)
length = return_val_l[0]
error_l = return_val_l[1]
error_w = 'Indtast tal'
#Test width for valid inputs when length == ''
elif width:
return_val_w = test_val(width)
width = return_val_w[0]
error_w = return_val_w[1]
error_l = 'Indtast tal'
#Both length and width == ''
else:
return render_template(
'rectangle_area.html',
input_text = input_text
)
#Final outputs depending on error types from input tests - if any
if error_l == '' and error_w == '':
return render_template(
'rectangle_circ.html',
result = rect_circ(length, width),
length = length,
width = width
)
elif error_l == '' and error_w != '':
return render_template(
'rectangle_circ.html',
length = length,
width = error_w,
error_w = error_w,
input_error = input_error
)
elif error_l != '' and error_w == '':
return render_template(
'rectangle_circ.html',
length = error_l,
width = width,
error_l = error_l,
input_error = input_error
)
elif error_l != '' and error_w != '':
return render_template(
'rectangle_circ.html',
length = error_l,
width = error_w,
error_l = error_l,
error_w = error_w,
input_error = input_error
)
else:
return render_template(
'rectangle_circ.html',
input_text = input_text
)
@app.route('/rect_area')
def area_input():
#Inputs from web
length = request.args.get('length')
width = request.args.get('width')
#Predefined values
error_l = ''
error_w = ''
input_text = '''Indtast værdierne for længde og bredde. Du må kun bruge tal.
Brug punktum i stedet for komma før decimaltal.'''
input_error = '''Brug kun tal større end nul og punktum i stedet for komma
før decimaltal.'''
#Test length and width for valid inputs
if length and width:
return_val_l = test_val(length)
length = return_val_l[0]
error_l = return_val_l[1]
return_val_w = test_val(width)
width = return_val_w[0]
error_w = return_val_w[1]
#Test length for valid inputs when width == ''
elif length:
return_val_l = test_val(length)
length = return_val_l[0]
error_l = return_val_l[1]
error_w = 'Indtast tal'
#Test width for valid inputs when length == ''
elif width:
return_val_w = test_val(width)
width = return_val_w[0]
error_w = return_val_w[1]
error_l = 'Indtast tal'
#Both length and width == ''
else:
return render_template(
'rectangle_area.html',
input_text = input_text
)
#Final outputs depending on error types from input tests - if any
if error_l == '' and error_w == '':
return render_template(
'rectangle_area.html',
result = rect_area(length, width),
length = length,
width = width
)
elif error_l == '' and error_w != '':
return render_template(
'rectangle_area.html',
length = length,
width = error_w,
error_w = error_w,
input_error = input_error
)
elif error_l != '' and error_w == '':
return render_template(
'rectangle_area.html',
length = error_l,
width = width,
error_l = error_l,
input_error = input_error
)
elif error_l != '' and error_w != '':
return render_template(
'rectangle_area.html',
length = error_l,
width = error_w,
error_l = error_l,
error_w = error_w,
input_error = input_error
)
else:
return render_template(
'rectangle_area.html',
input_text = input_text
)
if __name__ == '__main__':
app.run(debug=True)
#This script is for WEB use only.
#It is used by another script calling its funtions.
def rect_area(length, width):
return length * width
def rect_circ(length, width):
return 2 * length + 2 * width
def test_val(val):
try:
val = float(val)
if val <= 0:
error = 'Indtast et tal større end 0'
else:
error = ''
except ValueError:
error = 'Fejl i indtastning'
return val, error