资讯专栏INFORMATION COLUMN

python大佬养成计划----flask应用

daryl / 1643人阅读

摘要:将用户登陆信息绑定数据库要求将用户登陆时的信息,发送至后台与数据库进行比对,来判断用户是否可登陆文件,用来创建远程连接的类主程序创建连接判断用户名是否存在返回的是语句查询结果的个数如果为,没有查到。

将用户登陆信息绑定数据库

要求将用户登陆时的信息,发送至后台与数据库进行比对,来判断用户是否可登陆

#config.py文件,用来创建远程连接的类
class DB:
    HOST = "192.168.1.227"
    USER= "root"
    PASSWD = "sheen"
    PORT = 3306
    DBNAME = "test"
# 主程序
import pymysql
from 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  True
def 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  True
def 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 random
import os
from datetime import  datetime
import psutil
from flask import Flask, request, render_template, redirect, url_for, abort, session
from models import isPasswdOk, isUserExist, addUser
import platform
app = Flask(__name__)
app.config["SECRET_KEY"] =  random._urandom(24)

import  functools

def 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_login
def 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//")
def user(user_id):
    if 0

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44867.html

相关文章

  • python大佬养成计划----Flask蓝图

    摘要:使用蓝图的概念来制作应用程序组件和支持应用程序内部或跨应用程序的通用模式。蓝图可以大大简化大型应用程序的工作方式,并为扩展提供了在应用程序上注册操作的中心手段。相反,它是如何构造或扩展应用程序的蓝图。 蓝图 之前我们已经通过代码了解了一些Flask基本的用法,现在出现一个问题,我们要做的功能越来越多,路由是不是都要放在run文件中呢?例如我们在不同的文件都定义了一些路由,如果想要访问他...

    tianyu 评论0 收藏0
  • python大佬养成计划----flask的Session设置

    摘要:对象存储特定用户会话所需的属性及配置信息。当用户请求来自应用程序的页时,如果该用户还没有会话,则服务器将自动创建一个对象。当会话过期或被放弃后,服务器将终止该会话。因为的是通过加密之后放到了中。 什么是Session? cookie: 客户端浏览器的缓存; session: 服务端服务器的缓存; Session 和 Cookie类似,都是通过字典管理 key-value对。Sessi...

    Gilbertat 评论0 收藏0
  • python大佬养成计划----Web框架(Flask)

    摘要:是一个编写的微框架,让我们可以使用语言快速实现一个网站或服务。使用当你编写一个函数时,要想每个人都可以使用,需要用到来实现这个目标。 flask flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。 使用flask 当你编写一个函数时,要想每个人都可以使用,需要用到flask来实现这个目标。 导入falsk.Flask类 实...

    Genng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<