首页 > 技术文章 > flask CBV flask-session

XLHIT 2019-07-12 22:00 原文

flask  CBV

from flask import Flask, views, render_template, request

app = Flask(__name__,template_folder='template')
USER = {"username": "aaa", "password": "111"}


class Login(views.MethodView):    #注意导入的类   MethodView
  #methods=["GET","POST"] 可有可无 def
get(self): return render_template("login.html") def post(self): username = request.form.get("username") password = request.form.get("password") if username == USER["username"] and password == USER["password"]: return "登录成功" else: return render_template("login.html", error="用户名或者密码错误") app.add_url_rule("/login", view_func=Login.as_view(name="login")) #也可加上 endpoint=None if __name__ == '__main__': app.run("127.0.0.1", 5000)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post">
    {{ error }}
    <br>
    用 户:<input type="text" name="username">
    <br>
    密  码:<input type="password" name="password">
    <br>
    <input type="submit" value="登录">

</form>

</body>
</html>

flask-session  综合测试

manage.py 

注意 python 中安装flask-session 模块   

  Windows中 安装redis 数据库     启动数据库 连接数据库

  

  

from flask import Flask, request, session, redirect

from redis import Redis
from flask_session import Session

from day89.server import login
from day89.server import students
from day89.server import detail
from day89 import settings

app = Flask(__name__)

# 指定session 存储的数据库类型
app.config["SESSION_TYPE"] = "redis"
# 配置数据库实例
app.config["SESSION_REDIS"] = Redis(host="127.0.0.1", port=6379, db=6)
# 读取config配置 改写APP
Session(app)

# 加密钥
# app.secret_key = "xxx"


app.config.from_object(settings.Debugsetting)
# app.config.from_object(settings.Testingsetting)


# 在进入视图函数之前进行验证
@app.before_request
def is_login():
    if request.path == "/login":
        return None
    if not session.get("user"):
        return redirect("/login")


# 注册
app.register_blueprint(login.login)
app.register_blueprint(students.students)
app.register_blueprint(detail.detail)


# 错误界面
@app.errorhandler(404)
def error404(error_message):
    return "这个界面真没有!!!"


if __name__ == '__main__':
    app.run()

setting.py

class Debugsetting(object):
    DEBUG=True
    SESSION_COOKIE_NAME="I am debug session"


class Testingsetting(object):
    TESTING=True
    SESSION_COOKIE_NAME="I am testing session"

login.py

from flask import Blueprint, request, render_template, redirect, session,views
login = Blueprint("login", __name__)

USER = {"username": "aaa", "password": "111"}

# r = redis.StrictRedis(host='127.0.0.1', port=6379, db=6)
class Login(views.MethodView):
    def get(self):
        return render_template("login.html")

    def post(self):
        username = request.form.get("username")
        password = request.form.get("password")
        if username == USER["username"] and password == USER["password"]:

            session["user"]=username

            return redirect("/students")
        else:
            return render_template("login.html", error="用户名或者密码错误")


login.add_url_rule("/login",view_func=Login.as_view(name="login"))




# from flask import Blueprint, request, render_template, redirect, session
# login = Blueprint("login", __name__)
#
# USER = {"username": "aaa", "password": "111"}
# @login.route("/login", methods=["GET", "POST"])
# def login1():
#     if request.method == "GET":
#         return render_template("login.html")
#     else:
#         username = request.form.get("username")
#         password = request.form.get("password")
#         if username == USER["username"] and password == USER["password"]:
#             session["user"] = username
#             return redirect("/students")
#         else:
#             return render_template("login.html", error="用户名或者密码错误")
from flask import Blueprint, render_template, views

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 38, 'gender': ''},
    2: {'name': 'Boy', 'age': 73, 'gender': ''},
    3: {'name': 'EDU', 'age': 84, 'gender': ''},
}

students = Blueprint("students", __name__, )


class Students(views.MethodView):
    def get(self):
        return render_template("students.html", studentdict=STUDENT_DICT)


students.add_url_rule("/students", view_func=Students.as_view(name="students"))

#
# from flask import Blueprint, render_template
#
# STUDENT_DICT = {
#     1: {'name': 'Old', 'age': 38, 'gender': ''},
#     2: {'name': 'Boy', 'age': 73, 'gender': ''},
#     3: {'name': 'EDU', 'age': 84, 'gender': ''},
# }
#
# students = Blueprint("students", __name__,)
#
#
# @students.route("/students")
# def students1():
#     return render_template("students.html", studentdict=STUDENT_DICT)
View Code
from flask import Blueprint, request, render_template, views

detail = Blueprint("detail", __name__, )

STUDENT_DICT = {
    1: {'name': 'Old', 'age': 38, 'gender': ''},
    2: {'name': 'Boy', 'age': 73, 'gender': ''},
    3: {'name': 'EDU', 'age': 84, 'gender': ''},
}


class Detail(views.MethodView):
    def get(self):
        id = request.args.get("id")
        studentdetail = STUDENT_DICT.get(int(id))
        return render_template("detail.html", id=id, studentdetail=studentdetail)


detail.add_url_rule("/detail", view_func=Detail.as_view(name="detail"))

# from flask import Blueprint, request, render_template
#
# detail = Blueprint("detail", __name__,
#                   )
#
# STUDENT_DICT = {
#     1: {'name': 'Old', 'age': 38, 'gender': ''},
#     2: {'name': 'Boy', 'age': 73, 'gender': ''},
#     3: {'name': 'EDU', 'age': 84, 'gender': ''},
# }
#
#
# @detail.route("/detail")
# def detail1():
#     id = request.args.get("id")
#     studentdetail = STUDENT_DICT.get(int(id))
#     return render_template("detail.html", id=id, studentdetail=studentdetail)
View Code

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>

<form action="" method="post">
    {{ error }}
    <br>
    用户名:<input type="text" name="username">
    <br>
    密码:<input type="password" name="password">
    <br>
    <input type="submit" value="登录">

</form>


</body>
</html>
View Code
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{{ studentdict }}

<table border="1px">
    <thead>
    <tr>
        <th>id</th>
        <th>name</th>
        <th>detail</th>
    </tr>
    </thead>
    <tbody>
    {% for id,student in studentdict.items() %}
        <tr>
            <td>{{ id }}</td>
            <td>{{ student.name }}</td>
            <td><a href="/detail?id={{ id }}">detail</a></td>
        </tr>
    {% endfor %}
    </tbody>
</table>


</body>
</html>
View Code
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ id }}
{{ studentdetail }}

<table border="1px">
    <thead>
    <tr>
        <th>id</th>
        <th>name</th>
        <th>age</th>
        <th>gender</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>{{ id }}</td>
        <td>{{ studentdetail.name }}</td>
        <td>{{ studentdetail.age }}</td>
        <td>{% if studentdetail.gender !="" and studentdetail.gender !="" %}
            女
        {% else %}
            {{ studentdetail.gender }}
        {% endif %}
        </td>
    </tr>
    </tbody>
</table>
<br>
<button><a href="/students">返回</a></button>

</body>
</html>
View Code

 

推荐阅读