import mysql.connector,hmac,random,re
from flask import Flask, request, render_template
app=Flask(name)
#定义一个md5密码函数,转换用户密码
def to_md5(key,password):
return hmac.new(key.encode(‘utf-8’),password.encode(‘utf-8’),‘MD5’).hexdigest()
#-------------------------------------
class User(object):
def init(self, password):
self.key = ‘’.join([chr(random.randint(48, 122)) for i in range(20)]) # 这里的 self.key
self.password = to_md5(self.key, password) # 这里的 hmac_md5(self.key, password)
#-------------------------------------
#定义一个检查数据库函数,如果不存在用户表单就创建它
def check_sql():
conn = mysql.connector.connect(user=‘root’, password=‘123456’,host=“localhost”, database=‘test1’)
webdata = conn.cursor()
try:
webdata.execute(r’’‘CREATE TABLE IF NOT EXISTS user_info (username CHAR(20) PRIMARY KEY ,
password CHAR(200), key_p CHAR(20), telphone CHAR(20) ,email CHAR(30) ,user_address CHAR(50))’’’)
finally:
webdata.close()
conn.commit()
conn.close()
#定义一个检查登录函数
def check_login(username,password):
conn = mysql.connector.connect(user=‘root’, password=‘123456’,host=“localhost”, database=‘test1’)
webdata = conn.cursor()
webdata.execute(r"select * from user_info where username = %s", (username,))
data = webdata.fetchall()
try:
if data != []: # 查找到了该用户名
if data[0][1] == to_md5(data[0][2], password):
return 'ok'
else:
return 'error'
else: # 没有查找到了该用户名
return 'unreg'
finally:
webdata.close()
conn.commit()
conn.close()
#定义一个检查注册函数
def check_reg(username,password,confirm_password,telphone , email ,user_address):
conn = mysql.connector.connect(user=‘root’, password=‘123456’,host=“localhost”, database=‘test1’)
webdata = conn.cursor()
webdata.execute(r"select * from user_info where username = %s", (username,))
data = webdata.fetchall()
try:
if data != [] : # 查找到了用户名
return ‘failed’
#调用empty_info:如果if empty_info != “correct”
# 判断数据格式是否正确
phone_re = re.compile(‘0\d{2,3}\d{7,8}$|^1[358]\d{9}$|147\d{8}’) # 手机正则表达式
email_re = re.compile(r’[^.][\w.-]+@(?:[A-Za-z0-9]+.)+[A-Za-z]+$’) # 邮箱正则表达式
empty_info = {user_address == “”: “请输入住址”, email == “”: “请输入邮箱地址”, telphone == “”: “请输入手机号”,
phone_re.match(telphone) == False: “手机格式不正确”,
email_re.match(email) == False: “邮箱格式不正确”, confirm_password != password: “两次密码不一样”,
confirm_password == “”: “请输入确认密码”, password == “”: “请输入密码”,
len(password) < 8 or password.isalnum() == False: “密码不能小于8位,且必须是字母、数字组合”,
len(username) < 6 or username.isalnum() == False: “用户名不能小于6位,且必须是字母、数字组合”,
username == “”: “请输入用户名”}.get(1, “correct”)
if empty_info != “correct”:
return empty_info
else:
uer = User(password)
webdata.execute(r’insert into user_info values(%s,%s,%s,%s,%s,%s)’,(username,uer.password , uer.key ,telphone , email ,user_address))# 可以多家属性项。并且需要判断
print(‘新用户%s注册…’%username)
return ‘sucess’
finally:
webdata.close()
conn.commit()
conn.close()
#主页
@app.route(’/’,methods=[‘GET’,‘POST’])
def home():
return render_template(‘home.html’)
#注册页
@app.route(’/register’,methods=[‘GET’])
def reg_form():
return render_template(‘register.html’)
@app.route(’/register’,methods=[‘POST’])
def reg():
username = request.form[‘username’]
password = request.form[‘password’]
confirm_password = request.form[‘confirm_password’]
telphone = request.form[‘telphone’]
email = request.form[‘email’]
user_address = request.form[‘user_address’]
if username == ‘’ or password == ‘’:
return render_template(‘register.html’,message=‘账户名或密码不能为空!’)
else:
if check_reg(username,password,confirm_password,telphone,email,user_address) == ‘sucess’:
return render_template(‘form.html’,message=‘注册成功,请登录!’)
elif check_reg(username,password,confirm_password,telphone,email,user_address) == ‘failed’:
return render_template(‘register.html’, message=‘用户名已存在!’)
else:
return render_template(‘register.html’, message=check_reg(username,password,confirm_password,telphone,email,user_address))
#登录页
@app.route(’/signin’,methods=[‘GET’])
def login_form():
return render_template(‘form.html’)
@app.route(’/signin’,methods=[‘POST’])
def login():
username = request.form[‘username’]
password = request.form[‘password’]
if username == ‘’ or password == ‘’:
return render_template(‘form.html’,message=‘账户名或密码不能为空!’)
else:
if check_login(username,password) == ‘error’:
return render_template(‘form.html’,message=‘密码有误,请重新输入!’)
elif check_login(username,password) == ‘ok’:
return render_template(‘signin-ok.html’,username=username)
else:
return render_template(‘register.html’,message=‘未注册账号,请注册!’)
@app.route(’/signin-ok’,methods=[‘GET’])
def login_ok():
return render_template(‘signin-ok.html’)
if name == ‘main’:
check_sql()
app.run()