1.1创建超管以及登录渲染

1、这里我们创建超级管理员是用脚本来创建的脚本可以理解为函数

  我们在manage.py这个文件中创建

 1 #manager可以在终端使用指令操纵程序,option可以加参数
 2 @manager.option("-u","--name",dest="username")
 3 @manager.option("-p","--password",dest="password")
 4 @manager.option("-m","--moblie",dest="moblie")
 5 #创建可以超管函数,并用形参接收
 6 def createsuperuser(username,password,moblie):
 7     #判断接收到的参数是否为空
 8     if not all([username,password,moblie]):
 9         print("缺少必要参数")
10         return
11     #实例化User模型列,并且逻辑添加
12     user = User()
13     user.nick_name = username
14     user.password = password
15     user.mobile = moblie
16     #写入管理员权限
17     user.is_admin = True
18     try:
19         #提交到数据库
20         db.session.add(user)
21         db.session.commit()
22     except Exception as e:
23         current_app.logger.error(e)
24         db.session.rollback()
25         print("超级管理员创建失败")

创建完成后我们就可以在终(terminal)用指令添加超管了

D:PythonCodeflask_all>python manager.py createsuperuser -u 超管名字 -p 密码 -m 手机号

添加完就可以到数据库查询成功与否了

2、登录渲染

  2.1后台代码

 1 @admin_blue.route('/index')
 2 @user_login_data
 3 def admin_index():
 4     user = g.user
 5     #判断如果没有登录用户就跳转到登录页面
 6     if not user:
 7         return redirect(url_for("admin.admin_login"))
 8     context = {
 9         "user":user
10     }
11     return render_template("admin/index.html",context = context)
12 
13 @admin_blue.route('/login',methods=['GET','POST'])
14 @user_login_data
15 def admin_login():
16     user = g.user
17     #处理post请求
18     if request.method == "POST":
19         #接收参数
20         username = request.form.get("username")
21         password = request.form.get("password")
22         #判断参数是否齐全
23         if not all([username,password]):
24             return render_template("admin/login.html",errmsg = "缺少参数")
25 
26         try:
27             #获取用户信息
28             user = User.query.filter(User.nick_name == username).first()
29         except Exception as e:
30             current_app.logger.error(e)
31             return render_template("admin/login.html",errmsg = "数据库查询失败")
32         if not user:
33             return render_template("admin/login.html",errmsg = "账号或者密码错误")
34         #判断密码
35         if not user.check_password(password):
36             return render_template("admin/login.html",errmsg = "账号或者密码错误")
37         user_id = session.get("id")
38         is_admin = session.get("is_admin")
39         #改变session实现登录
40         session["mobile"] = user.mobile
41         session["id"] = user.id
42         session["nick_name"] = user.nick_name
43         session["is_admin"] = True
44         return redirect(url_for("admin.admin_index"))
45     return  render_template("admin/login.html")

  2.2前端代码

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>新经资讯后台管理</title>
 6     <link rel="stylesheet" type="text/css" href="../../static/admin/css/reset.css">
 7     <link rel="stylesheet" type="text/css" href="../../static/admin/css/main.css">
 8 </head>
 9 <body>
10     <div class="login_logo">
11         <img src="../../static/admin/images/logo.png" alt="">
12     </div>    
13     <form method="post" class="login_form">
14         <h1 class="login_title">用户登录</h1>
15 {#        <input type="hidden" name="csrf_token" value = "{{ csrf_token() }}">#}
16         <input type="text" name="username" placeholder="用户名" class="input_txt">
17         <input type="password" name="password" placeholder="密码" class="input_txt">
18         {% if errmsg %}
19             <div class="error_tip"style="display: block">{{ errmsg }}</div>
20         {% endif %}
21 
22         <input type="submit" value="登 录" class="input_sub">
23     </form>
24     <div class="login_bg"></div>
25 </body>
26 </html>

3、处理逻辑反复请求

  我们再init中加入中间键

 1 @admin_blue.before_request
 2 def before_request():
 3     #如果路径结束不是以我们调用的视图函数结束时:
 4     if not request.url.endswith(url_for("admin.admin_login")):
 5         #获取用户的session值
 6         user_id = session.get("id")
 7         is_admin = session.get("is_admin")
 8         #判断有没有值和是不是超级管理员
 9         if not user_id or not is_admin:
10             #如果不是返回登录界面
11             return redirect(url_for("admin.admin_login"))

其中装饰器@admin_blue.before_request中before_request意思为再请求之前

原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/13947850.html