zoukankan      html  css  js  c++  java
  • 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意思为再请求之前

  • 相关阅读:
    codechef Dynamic GCD [树链剖分 gcd]
    bzoj 4546: codechef XRQRS [可持久化Trie]
    bzoj 4835: 遗忘之树 [树形DP]
    bzoj 4033: [HAOI2015]树上染色 [树形DP]
    bzoj 4591: [Shoi2015]超能粒子炮·改 [lucas定理]
    3167: [Heoi2013]Sao [树形DP]
    bzoj 3812: 主旋律 [容斥原理 状压DP]
    有标号的二分图计数 [生成函数 多项式]
    有标号DAG计数 [容斥原理 子集反演 组合数学 fft]
    BZOJ 3028: 食物 [生成函数 隔板法 | 广义二项式定理]
  • 原文地址:https://www.cnblogs.com/Hdwmsyqdm/p/13947850.html
Copyright © 2011-2022 走看看