将用户登陆信息绑定数据库
要求将用户登陆时的信息,发送至后台与数据库进行比对,来判断用户是否可登陆
#config.py文件,用来创建远程连接的类class db: host = '192.168.1.227' user= 'root' passwd = 'sheen' port = 3306 dbname = 'test'
# 主程序import pymysqlfrom config import db# 1. 创建连接conn = pymysql.connect( host=db.host, user=db.user, passwd=db.passwd, port=db.port, db=db.dbname,)cur = conn.cursor()def isuserexist(username): 判断用户名是否存在 sqli = select * from users where name='%s' %(username) res = cur.execute(sqli) # res返回的是sql语句查询结果的个数; # 如果为0, 没有查到。 if res == 0: return false else: return truedef ispasswdok(username, passwd): sqli = select * from users where name='%s' and passwd='%s' %( username, passwd) res = cur.execute(sqli) if res == 0 : return false else: return truedef adduser(username, passwd): 用户注册时, 添加信息到数据库中 sqli = insert into users(name, passwd) values('%s', '%s') %( username, passwd) try: res = cur.execute(sqli) conn.commit() except exception as e: conn.rollback() return e# cur.close()# conn.close()if __name__ == __main__: adduser('root', 'root') print(isuserexist('root')) print(ispasswdok('root', 'root'))
判断用户是否登陆
某些网站的部分内容,只对已经登陆的用户显示,这时候,需要我们判断用户是否登陆
import randomimport osfrom datetime import datetimeimport psutilfrom flask import flask, request, render_template, redirect, url_for, abort, sessionfrom models import ispasswdok, isuserexist, adduserimport platformapp = flask(__name__)app.config['secret_key'] = random._urandom(24)import functoolsdef is_login(f): 判断用户是否登陆的装饰器 @functools.wraps(f) def wrapper(*args, **kwargs): # run函数代码里面, 如果登陆, session加入user, passwd两个key值; # run函数代码里面, 如果注销, session删除user, passwd两个key值; # 如果没有登陆成功, 则跳转到登陆界面 if 'user' not in session: return redirect('/login/') # 如果用户是登陆状态, 则访问哪个路由, 就执行哪个路由对应的视图函数; return f(*args, **kwargs) return wrapper# 用户主页@app.route('/')def index(): return render_template('index.html')# 用户登陆按钮@app.route('/login/', methods=['get', 'post'])def login(): if request.method == 'post': print(request.form) # 1. 如何获取到用户提交的信息呢? user = request.form['user'] passwd = request.form['passwd'] # 2. 判断用户名和密码是否正确 if ispasswdok(user, passwd): # 将用户名和密码信息存储到session中; session['user'] = user session['passwd'] = passwd # 如果登陆成功, 跳转到主页; return redirect(url_for('index')) else: # 如果登陆失败, 重新登陆; return render_template('login.html', message=用户名或者密码错误) else: # 用户是get请求, 返回登陆的html页面 # 1. 读取login.html文件的内容 # 2. 将读取的内容返回给用户界面 return render_template('login.html')# 用户注销@app.route('/logout/')def logout(): session.pop('user', none) session.pop('passwd', none) # 注销即删除用户的session信息, 注销成功, 跳转到首页; return redirect(url_for('index')) # return redirect('/')# 用户注册# http方法: get, post(需要提交用户名和密码信息)@app.route('/register/', methods=['get', 'post'])def register(): # 判断是否提交注册信息; if request.method == 'post': user = request.form['user'] passwd = request.form['passwd'] if isuserexist(user): message = 用户已经存在 return render_template('register.html', message=message) else: adduser(user, passwd) return redirect(url_for('login')) else: return render_template('register.html')# 系统监控@app.route('/sysinfo/')@is_logindef sysinfo(): info = platform.uname() # 获取开机时间的时间戳, 需要安装psutil模块; boot_time = psutil.boot_time() # 将时间戳转换为字符串格式, 两种方法, 任选一种l # print(time.ctime(boot_time)) boot_time = datetime.fromtimestamp(boot_time) # 获取当前时间 now_time = datetime.now() # 获取时间差 delta_time = now_time - boot_time delta_time = str(delta_time).split('.')[0] return render_template('sysinfo.html', hostname = info.node, sysname = info.system, release = info.release, machine = info.machine, now_time = now_time, boot_time = boot_time, delta_time = delta_time )# 404异常处理: 类似于捕获异常@app.errorhandler(404)def not_found(e): return render_template('404.html')# 抛出异常@app.route('/user/<int:user_id>/')def user(user_id): if 0