| Python信息系统实验:仓库管理 这是给物流管理专业设计的仓库信息管理实验。尽量采用基本的方式组织数据、模块与实验。同时体现Browser-Application Server-Database 的三层逻辑。
 实验要求软件开发工具:Python+ Flask+HTML数据库:SQLite架构:三层架构(Browser+Application Servier+Database)
 仓库管理实验模拟一个简单的仓库的以下基本管理过程: 1)库位查询:查询库位编码及其容量2)增加库位3)删除库位4)入库:商品编码、库位5)出库:商品编码6)商品库位查询:根据商品编码找库位7)库位统计
 数据库表格StorageUnit: scode text, ssize int;Storage: scode text, ccode text, cname text, status text (=in, out)
 Web Flask关于Flask请参考前文。Flask可以做很复杂的应用,但是本文仅仅利用其最简单的能力完成几个页面和功能之间的切换。 几分钟做个Web应用
 from flask import Flaskfrom flask import session, redirect, url_for, request
 from flask import render_template
 
 数据访问接口关于数据库及其访问接口,请参考前文。 Python数据库
 from Data import Data
 导航采用三组菜单导航 基本功能组:主页index、关于about、登录login对存储单元的操纵,主要是列表显示StorageUnitList、增加StorageUnitAdd和删除StorageUnitDelete对存储记录的操纵,主要是列表显示StorageList、增加StorageAdd和删除StorageDelete对于Add和Delete这两类Action,生成表单Form和执行更新分开来,,例如StorageAdd生成Form,而StorageAddExe执行在login,StorageUnitAddExe,StorageUnitDeleteExe,StorageAddExe,StorageDeleteExe中,通过session或request操纵交互数据。
 app = Flask(__name__)
 @app.route('/')
 def index():
 if 'username' in session:
 return redirect(url_for('StorageUnitList'))
 else:
 return redirect(url_for('login'))
 
 @app.route('/about')
 def about():
 return render_template('about.html', name='Flask')
 
 @app.route('/login', methods=['GET', 'POST'])
 def login():
 if request.method == 'POST':
 u = request.form['username']
 if u is None or len(u)==0:
 return redirect(url_for('login'))
 session['username'] = u
 return redirect(url_for('StorageUnitList'))
 return '''
 
 Warehouse management
 
 
 
 
 '''
 
 @app.route('/StorageUnitList')
 def StorageUnitList():
 db = Data()
 db.createDatabase()
 d = db.selectStorageUnit()
 return render_template('StorageUnitList.html', data=d)
 
 @app.route('/StorageUnitAdd', methods=['GET', 'POST'])
 def StorageUnitAdd():
 return '''
 
 Warehouse management --> add a Storage Unit
 
 
 
 
 '''
 
 @app.route('/StorageUnitAddExe', methods=['GET', 'POST'])
 def StorageUnitAddExe():
 scode = request.form['scode']
 ssize = request.form['ssize']
 if scode is not None and len(scode)>0 and \
 ssize is not None and len(ssize)>0:
 db = Data()
 db.createDatabase()
 db.insertStorageUnit(scode,ssize);
 return redirect(url_for('StorageUnitList'))
 
 @app.route('/StorageUnitDelete', methods=['GET', 'POST'])
 def StorageUnitDelete():
 return '''
 
 Warehouse management --> delete a Storage Unit
 
 
 
 
 '''
 
 @app.route('/StorageUnitDeleteExe', methods=['GET', 'POST'])
 def StorageUnitDeleteExe():
 scode = request.form['scode']
 if scode is not None and len(scode)>0:
 db = Data()
 db.createDatabase()
 db.deleteStorageUnit(scode);
 return redirect(url_for('StorageUnitList'))
 
 
 
 @app.route('/StorageList')
 def StorageList():
 db = Data()
 db.createDatabase()
 d = db.selectStorage()
 return render_template('StorageList.html', data=d)
 
 @app.route('/StorageAdd', methods=['GET', 'POST'])
 def StorageAdd():
 return '''
 
 Warehouse management --> add a Storage
 
 
 
 
 '''
 
 @app.route('/StorageAddExe', methods=['GET', 'POST'])
 def StorageAddExe():
 scode = request.form['scode']
 ccode = request.form['ccode']
 cname = request.form['cname']
 status = request.form['status']
 if scode is not None and len(scode)>0 and ccode is not None and \
 len(ccode)>0 and cname is not None and \
 len(cname)>0 and status is not None and len(status)>0:
 db = Data()
 db.createDatabase()
 if len(db.selectStorageUnitBy(scode))>0:
 db.insertStorage(scode,ccode,cname,status);
 return redirect(url_for('StorageList'))
 
 @app.route('/StorageDelete', methods=['GET', 'POST'])
 def StorageDelete():
 return '''
 
 Warehouse management --> delete a Storage Unit
 
 
 
 
 '''
 
 @app.route('/StorageDeleteExe', methods=['GET', 'POST'])
 def StorageDeleteExe():
 scode = request.form['scode']
 ccode = request.form['ccode']
 if scode is not None and len(scode)>0 and \
 ccode is not None and len(ccode)>0:
 db = Data()
 db.createDatabase()
 db.deleteStorage(scode, ccode);
 return redirect(url_for('StorageList'))
 
 # set the secret key:
 app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT**^4'
 
 if __name__ == '__main__':
 app.run()
 
 # Flask:
 # http://docs.jinkan.org/docs/flask/index.html
 # Template:
 # http://docs.jinkan.org/docs/jinja2/
 
 Web页面如上代码所隐含,使用了一个静态文件,即about.html;使用了两个模板文件,用于生成检索数据库表生成的列表,即StorageList.html和StorageUnitList.html;注意在login,StorageUnitAdd,StorageUnitDelete,StorageAdd,StorageDelete中都生成了Form,这些内容是在浏览器前端显示的。
 about.html
 
 Warehouse management: this is just a test application for demonstrating logistics information systems.
 
 
 
 
 
 
 Menu | 
 
 
 Storage Unit | 
 [list] | 
 [add] | 
 [delete] | 
 
 
 Storage | 
 [list] | 
 [add] | 
 [delete] | 
 
 
 System | 
 [about] | 
 [login] | 
 [index] | 
 
 
 
 
 
 StorageList.html
 
 Warehouse management -> Storage
 
 
 
 
 
 
 Menu | 
 
 
 Storage Unit | 
 [list] | 
 [add] | 
 [delete] | 
 
 
 Storage | 
 [list] | 
 [add] | 
 [delete] | 
 
 
 System | 
 [about] | 
 [login] | 
 [index] | 
 
 
 
 
 
 
 
 Storage Unit Code | 
 Goods Code | 
 Goods Name | 
 Status | 
 {% for a in data %}
 
|
 
 {{ a[0] }} | 
 {{ a[1] }} | 
 {{ a[2] }} | 
 {{ a[3] }} | 
 {% endfor %}
 
 
 
 
 
 StorageUnitList.html
 
 Warehouse management -> Storage Units
 
 
 
 
 
 
 Menu | 
 
 
 Storage Unit | 
 [list] | 
 [add] | 
 [delete] | 
 
 
 Storage | 
 [list] | 
 [add] | 
 [delete] | 
 
 
 System | 
 [about] | 
 [login] | 
 [index] | 
 
 
 
 
 
 
 | Code | Size |  {% for a in data %}
 
|
 
 {{ a[0] }} | 
 {{ a[1] }} | 
 {% endfor %}
 
 
 
 
 
 测试在Anaconda Spyder中执行index.py,得到:  * Serving Flask app "index" (lazy loading)* Environment: production
 WARNING: This is a development server. Do not use it in a production deployment.
 Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 
 在浏览器输入以下网址测试: http://127.0.0.1:5000/ LoginStorage Unit: ListStorage Unit: AddStorage Unit: DeleteStorage: ListStorage: AddStorage: Delete私信小编01 领取完整代码
 |