码字不易转载请注明出处,以及链接地址
最近学校实训,要求使用python制作一个简单的银行系统(就是在控制台输出的那种形式),个人觉得不太正规,然后就自己使用了flask框架搭建了一个简单的银行系统网站。
由于之前没有接触过python这次实训我们首先是学习的python的基础及语法知识,接下来才开始着手开始项目。
项目分为前端、后台;前端就是templates和static目录分别放置HTML文件和静态资源;后台文件有app.py文件(用来编写后台接口与spring项目中的controller层类似)和functions.py文件(用来写各种方法以及业务逻辑与spring项目中的service层和dao层类似);
此外,还有一个存储数据的文件userdata.txt文件。目录如图所示:
首先是写了用户登录包括其界面及功能实现:
界面是我从网上找的,如果是自己写用来熟悉的话可以自己写一个表单(因为最后我们使用表单提交的),总之我们的重点不在于页面是否美观。
functions.py方法文件中:
def check_password(card,password):
print(card)
print(password)
file_object=open('userdata.txt','r')#读取数据文件
data = json.load(file_object)
#使用json.load读取到内存中,在这之前要引入json模块“import json”
if card in data.keys():
if str(password) == data[card][0]:
print(data[card][0])
print("成功登陆!")
return 1
else:
print("卡号或密码错误--:(")
return 0
else:
print("卡号或密码错误--:(")
return 0
在app.py文件中,与前台的接口:
@app.route('/index')#这里写入的是接口名称,即URL地址中的名称
def hello_world(): #这相当于是前台界面的映射,输入这个接口才能看到这个页面
return render_template('index.html') #比如127.0.0.1:5000/index
@app.route('/denglu',methods=['post']) #methods,是前台form表单提交的方式,也可以写成
#['post','get']
def come():
username=request.form.get('username') #接收前台传来的值
password=request.form.get('password')
is_login = func.check_password(username, int(password))
if is_login==1:
session['username'] = username #若验证成功,则将卡号(用户名存到session中)
return render_template('login.html')#这里是返回页面的意思
elif is_login==0:
return render_template('index.html')
另外需要在app.py文件顶部加入这些:
from flask import Flask,render_template,request,make_response,session
import functions as func
import random
这样登录模块就实现了。
用户注册创建模块:
页面为:
functions.py文件中写入了一个保存数据的函数:
#保存函数
def save_user(card,truename,id,telphone,password,count=0):
with open("userdata.txt",'r') as file_object:
data = json.load(file_object)
data[card] = [password,count,truename,id,telphone]
write_user(data)
#写入函数
def write_user(data):
with open("userdata.txt", 'w') as file_object:
json.dump(data,file_object)
app.py文件中:
@app.route('/zhuce1')
def zhuce1():
return render_template('zhuce.html')
@app.route('/zhuce',methods=['post'])
def zhuce():
truename = request.form.get('truename')
id = request.form.get('id')
telphone=request.form.get('telphone')
password=request.form.get('password')
card = random.randint(10000, 99999) #生成5位随机数
print("卡号:" + str(card))
print("注册成功")
func.save_user(card,truename,id,telphone,password)
card111='您的卡号为:'+str(card)+'请登录'
return render_template('index.html',cardIs=card111)#返回至前台页面,并且传值过去,前台
#用“{{cardIs}}”接收
用户余额查询:
用户余额查询,就是在session中将card值取出来,然后作为参数去调用show_account()方法,之后该方法将余额返回至search_money()中,再传给前台,就完成了用户余额查询的所有流程。
前台页面:
functions.py文件中:
def show_account(card):
with open('userdata.txt','r') as file_object:
data = json.load(file_object)
print("账户余额为:"+str(data[card][1]))
return data[card][1]
app.py文件中:
@app.route('/search_money')
def search_money():
if 'username' in session:
yue=func.show_account(session['username'])
return render_template('search_money.html',result=yue)
账户存款功能:
用户存款功能同样是在session中取到当前card值,然后显示在当前页面,使用户确定是自己的账户,用户在前端输入要存入的金额,然后点击确定,前台将数据post提交到后台‘/cun_money’接口,然后接口调用相应的方法,将用户相应的金额存到数据表中,之后将结果返回至前台。
前台页面:
function.py文件中:
def saving(card,jine):
with open('userdata.txt','r') as file_object:
data = json.load(file_object)
print('请输入要存入的金额:')
#a=int(input())
print('存入的金额为:'+jine)
data[card][1]=data[card][1]+int(jine)
write_user(data)
print('总金额为:'+str(data[card][1]) )
return data[card][1]
app.py文件中:
@app.route('/cun_money1')
def cun_money1():
if 'username' in session:
card=session['username']
return render_template('cun_money.html',resultC=card)
@app.route('/cun_money',methods=['get','post'])
def cun_money():
jine=request.form.get('jine')
if 'username' in session:
card=session['username']
zong=func.saving(card,jine)
session['zong0']=zong
return render_template('cun_money.html',requestJ="您的存入了"+str(jine)+"元,"+"目前总金额为:"+str(zong)+"元")
账户取款功能:
同样的,还是先通过映射使用户看到取款界面,再通过传值的方式进入后台接口,使用相应的方法,操作数据表,并返回结果(不同模块相同流程思想不再赘述)。
function.py文件中:
def draw(card,qu_jine):
with open('userdata.txt','r') as file_object:
data = json.load(file_object)
print('请输入要取出的金额:')
#mone = int(input())
count = data[card][1]
if count >= int(qu_jine) :
count -= int(qu_jine)
data[card][1] = count
write_user(data)
print("您成功取走:"+str(int(qu_jine)))
return 1
else:
print("余额不足")
return 0
app.py文件中:
@app.route('/qu_money1')
def qu_money1():
if 'username' in session:
#zong1=session['zong']
zong1=session['zong0']
print('zong1==='+str(zong1))
return render_template('qu_money.html',resultZ=zong1)
@app.route('/qu_money',methods=['post'])
def qu_money():
if 'username'in session:
card = session['username']
qu_jine=request.form.get('qu_jine')
jieguo=func.draw(card,qu_jine)
if jieguo==1:
result='您已取款成功'
elif jieguo==0:
result='您的余额不足,取款失败'
return render_template('qu_money.html',result11=result)
账户间的转账:
同时去数据表操作了两个用户,其实原理是一样的
functions.py文件中:
def zhuanzhang(card1,card2,jine):
file_Object=open('userdata.txt','r')
data=json.load(file_Object)
data[card1][1]=data[card1][1]-int(jine)
data[card2][1]=data[card2][1]+int(jine)
write_user(data)
print(data[card1][1])
print(data[card2][1])
return data[card1][1]
app.py文件中:
@app.route('/zhuan_money1')
def zhuan_money1():
return render_template('zhuan_money.html')
@app.route('/zhuan_money',methods=['post'])
def zhuan_money():
if 'username' in session:
card1=session['username']
card2=request.form.get('card2')
jine=request.form.get('jine')
result=func.zhuanzhang(card1,card2,jine)
return render_template('zhuan_money.html',shenyu='转账成功,剩余金额为'+str(result))
查询用户信息:
查询当前账户下的详细信息,在这里后台返回前台的是一个字典形式的数据(键值对),前台通过键去取值
页面:
前台代码为:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>查询详细信息</title>
</head>
<body>
<!--{{xinxi}}-->
<table>
<tr>
<td>银行卡号为:{{xinxi['卡号']}}</td>
</tr>
<tr>
<td>姓名为:{{xinxi['姓名']}}</td>
</tr>
<tr>
<td>账号余额为:{{xinxi['余额']}}</td>
</tr>
<tr>
<td>身份证号为:{{xinxi['身份证号']}}</td>
</tr>
<tr>
<td>银行预留手机号码为:{{xinxi['手机号']}}</td>
</tr>
</table>
</body>
</html>
function.py文件:
def showinfo(card):
with open('userdata.txt','r') as file_object:
data = json.load(file_object)
ListD={'卡号':card,'姓名':data[card][2],'余额':data[card][1],'身份证号':data[card][3],'手机号':data[card][4]}
return ListD
app.py文件:
app.route('/shouinfo1')
def shouinfo():
if'username'in session:
card=session['username']
info=func.showinfo(card)
return render_template('show_info.html',xinxi=info)
OK,就是这样,一个简单的使用flask框架搭建python web例子就好了,欢迎大家提问。
===============================================================
这是源码下载地址:https://download.csdn.net/download/yuyaoyu/11097485