使用flask框架搭建python web实战

     码字不易转载请注明出处,以及链接地址

       最近学校实训,要求使用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

  • 29
    点赞
  • 195
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值