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意思为再请求之前