• Python flask+css+js+ajax 综合复习


    flask 基本语法结构

         

          注:这里练习的时候把装饰器的@给忘记了,导致访问404

    下面练习一下在前段向后端传递参数

          get请求需要用   request.args.get('变量') 去接收,

          get请求的参数都是放置在url中的, 如 http://127.0.0.1:33334/?user=python

          这样就可以获取到了user的值了

     

          post请求的参数部分是放置在body里面的,url中没有直接的体现

          获取的语法 request.form.get('user')

          

          render_template 是用来渲染页面的。

          结合render_template与 request.form.get('user'),来获取post的参数

         

          前端页面 

         

          注意,这里练习的时候把form写成了from了,导致点击submit按钮没反应

        action='/'是把数据提交的地址,也就是数据是谁来接收的

          post请求提交获取参数的样例已经实现。

    前段内容回顾

    html
    head
    style 手写css
    link 引入css
    body
    h1~h6 标题
    table 表格
    tr,td
    form 表单
    input ,button
    p 段落
    img 图片
    a 超链接

    div 和span (这两个没有默认的样式,一个是盒子,一个事行内元素)

    script #引入js

    选择器

    1、元素选择器

    <style>
      p{
        color:red;
      }
    </style>

    2、id选择器      用#号开头来表示

    #part1{
    color:blue;
    }

    3、class选择器      用.开头来表示,这些选择器中, class的使用居多。它的定位准确。

    .font-yellow{
    color:yellow;
    }

    当引用class选择器的时候,也可以选择多个, 如:
    <div class'font-yellow font-30'>hello</div>

    4、属性选择器

    <div xxx='reoboot'> hello div </div>
    <div xxx='python'> hello again </div>

    [xxx='reboot']{
    color:red;
    }
    这样的话,只有第一行会引用到,
    [xxx]{
    color:red;
    }
    这样的话,两行都会被引用到了

    5、层级选择器

    <div> 
    <p> 一个段落 </p>
    </div>
    <p> 第二个段落 <p>

    div p{
    color:red;
    }
    这样的话,只有第一个会被引用到。

    Jquery

    用法:
    $(选择器).操作函数()
    html 操作或者获取元素的内容
    val 操作或者获取输入框的值
    on 绑定事件
    find(选择器) 查找元素的内容
    .show 显示
    .hide 隐藏
    css 修改css样式
    <div>
    <p> </p>
    <div>
    <button id='click-btn' class="btn btn-success">
    </button>
    <input type="text' id='test'>

    <script src='jquery.js'></script>
    <script>
    $('div p').html(xxx123).css('color','red').hide(3000) #支持链式的写法
    $('#click-btn').on('click',function(){
    $('#test').val('haha python is good')

    })
    $('#test').val('hello python')

    </script>

    this 

        

        浏览器的console中点击的话就会显示   1, 这四个都是显示1,那怎么区分是点击了哪个呢?看下面

         点击下看看,this显示的是什么

        

        下面用jquery,来包装下:

        

       现在点击的话就可以取到想要的东西了

        

        

        这两种的效果是一样的,区别在于,下面的这种写法,里面有cache的机制,写多了,会比上面的那种写法快。

     2017-07-05总结学习

      学习了一段时间,jquery的语法和ajax的语法,傻傻分不清楚,慢慢的来做总结

      jquery,绑定事件:

        $('xxx').on('click',function(){})

      ajax:

        $.get,$.post,$.getJSON

        $.ajax是底层的方法,可以看jquery的原代码

     

    作业问题总结

      遇到的问题是,

      

      修改完密码后,调出如图的黑色界面,但是北京内容的内容可以显示,密码确实已经被修改了。

      问题在于,模态框没有关闭。---no ,no ,别人指导错了,不是这个原因,看下面详解:

      点击答案

      

      模态窗加载的时候,会多出一个 class='modal-backdrop'的一行,不清楚为什么不能自动消除,需要代码给移除

      

      另外:

      

      可以在这里查看定义id名字的信息,这里有9个.update-btn,命名重复了。

     

    验证输入框中的内容,比如长度  

    <body>
        <p>
            输入框的长度校验
        </p>
        username:<input id="test-input" type="text" name="usename">
        <button id="hello">hello</button>
    
        <script src="./jquery.min.js"></script>
        <script>
            var input=$('#test-input')
            input.on('change',function(){
                var vall=$(this).val()
                if(vall.length>10){
                    alert('too long!')
                }else if(vall.length<3){
                    alert('too short!!')
                }
            })
    
        </script>
    
    </body>

      这里用的是change.在输入框中输入完毕后,鼠标离开,才会在console.log()中显示输入的东西

      这里复习一下val的用法:  

    三个简单实用的用于 DOM 操作的 jQuery 方法:

    • text() - 设置或返回所选元素的文本内容
    • html() - 设置或返回所选元素的内容(包括 HTML 标记)
    • val() - 设置或返回表单字段的值

      var() 返回值的用法如实例所示,当然也可以设置值,

      $('#hello').on('click',function () {
    input.val('hello world')

      当然,html中也有自己限制长度的,maxlength='5' #可以限制最长,

    绑定事件需要注意的事项  

    <body>
    
        <button id="hello">hello</button>
        <button id="world">world</button>
        <script src="./jquery.min.js"></script>
        <script>
            $(document).on('click','#hello',function () {
                $('#world').on('click',function () {
                    alert('world')
                })
            })
    
        </script>
    
    </body>

      这段代码需要注意的地方:

      1、使用了ducument,这个是防止页面加载完之前就绑定了事件,加载完之后再访问就不起作用了

      2、这种嵌套式的,这么写会有一个问题,就是点击hello button多少次,再点击world button,就会跳出多少次

      解决这个问题的办法:添加.off() 

       $('#world').off().on('click',function () {}

    作业代码:

    效果如下图所示,实现增删改查:

      

    flask代码

      1 #!/usr/bin/python
      2 from flask import Flask,render_template,request,redirect,session
      3 import MySQLdb as mysql
      4 
      5 con = mysql.connect(host='59.110.12----',user='wo----',passwd='123------',db='-------')
      6 con.autocommit(True)
      7 cur =con.cursor()
      8 
      9 app = Flask(__name__)
     10 import until
     11 from until import app_index,app_login,app_delete,app_adduser,app_updatepw,app_getpw
     12 # use random
     13 app.secret_key = 'iouasoiduio89127398981273'
     14 
     15 @app.route('/usertemp')
     16 def usertemp():
     17     if 'user' in session:
     18         return render_template('usertemp.html',user=session['user'],users=app_index())
     19 
     20 @app.route('/')
     21 def index():
     22     if 'user' in session:
     23         return render_template('index.html',user=session['user'],users=app_index())
     24     else:
     25         return redirect('/login')
     26 
     27 @app.route('/login',methods=['GET','POST'])
     28 def login():
     29     if request.method=='GET':
     30         return render_template('login.html')
     31     elif request.method=='POST':
     32         user = request.form.get('user')
     33         pwd = request.form.get('pwd')
     34         app_user = app_login(user,pwd)
     35         if app_user:
     36             session['user'] = user
     37             return redirect('/')
     38         else:
     39             return 'wrong user. or passwd'
     40 
     41 @app.route('/delete')
     42 def deleteuser():
     43     user = request.args.get('user')
     44     print 'user',user
     45     app_delete(user)
     46     return 'ok' 
     47 
     48 @app.route('/changepw',methods=['GET','POST'])
     49 def changepw():
     50    # if request.method == 'GET':
     51    #     user = request.args.get('user')
     52    #     return render_template('changepw.html',user=user)
     53    #elif request.method == 'POST':
     54     user = request.form.get('user')
     55     oldpwd = request.form.get('oldpwd')
     56     newpwd = request.form.get('newpwd')
     57     confirmpwd = request.form.get('confirmpwd')
     58     pwd = list(app_getpw(user))  
     59     pwd = ''.join(pwd)
     60     pwd = pwd.strip()
     61     if pwd!=oldpwd:
     62         return 'wrong old password'
     63     if newpwd!=confirmpwd:
     64         return 'new pwd not equal to confirmpwd'
     65     app_updatepw(newpwd,user)
     66     return 'ok'
     67 
     68 ##@app.route('/adduser')
     69 ##def adduser():
     70 ##    user = request.args.get('user')
     71 ##    pwd = request.args.get('pwd')
     72 ##    if (not user) or (not pwd):
     73 ##        return 'need username and password'
     74 ##
     75 ##    sql = 'insert into user values ("%s","%s")'%(user,pwd)
     76 ##    cur.execute(sql)
     77 ##    return 'ok'
     78 
     79 @app.route('/adduser',methods=['GET','POST'])
     80 def adduser():
     81     #if request.method == 'GET':
     82     #    return render_template('adduser.html')
     83     #elif request.method =='POST':
     84     #user = request.form.get('user')
     85    # pwd = request.form.get('pwd')
     86     user = request.args.get('user')
     87     pwd = request.args.get('pwd')
     88     app_adduser(user,pwd)
     89     #return redirect('/')
     90     return 'ok' 
     91 
     92 @app.route('/logout')
     93 def logout():
     94     del session['user']
     95     return redirect('/login')
     96 
     97 
     98 
     99 
    100 
    101 if __name__=="__main__":
    102     app.run(host='0.0.0.0',port=33333,debug=True)
    View Code

    数据库代码:

     1 #!/usr/bin/python
     2 import MySQLdb as mysql
     3 from config import ST,DB_PORT,DB_USER,DB_PASSWD,DB_DBNAME,DB_CHARSET
     4 
     5 sql_all = 'select * from user'
     6 sql_login = 'select * from user where (username="%s") and (password="%s")'
     7 sql_delete = 'delete from user where username="%s"'
     8 sql_adduser = 'insert into user values ("%s","%s")'
     9 sql_updatepw = 'update user set password="%s" where username="%s"'
    10 sql_getpw = 'select password from user where username="%s"'
    11 
    12 
    13 def app_index():
    14     con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
    15     con.autocommit(True)
    16     cur =con.cursor()
    17     cur.execute(sql_all)
    18     res = cur.fetchall()
    19     cur.close()
    20     con.close()
    21     return res
    22 
    23 def app_login(username,passwd):
    24     con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
    25     con.autocommit(True)
    26     cur =con.cursor()
    27     cur.execute(sql_login%(username,passwd))
    28     res = cur.fetchone()
    29     cur.close()
    30     con.close()
    31     return res
    32 
    33 def app_delete(username):
    34     con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
    35     con.autocommit(True)
    36     cur =con.cursor()
    37     cur.execute(sql_delete%(username))
    38     res = cur.fetchone()
    39     cur.close()
    40     con.close()
    41 
    42 def app_adduser(username,passwd):
    43     con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
    44     con.autocommit(True)
    45     cur =con.cursor()
    46     cur.execute(sql_adduser%(username,passwd))
    47     res = cur.fetchone()
    48     cur.close()
    49     con.close()
    50 
    51 def app_updatepw(passwd,username):
    52     con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
    53     con.autocommit(True)
    54     cur =con.cursor()
    55     cur.execute(sql_updatepw%(passwd,username))
    56     res = cur.fetchone()
    57     cur.close()
    58     con.close()
    59 
    60 def app_getpw(username):
    61     con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
    62     con.autocommit(True)
    63     cur =con.cursor()
    64     cur.execute(sql_getpw%(username))
    65     res = cur.fetchone()
    66     cur.close()
    67     con.close()
    68     return res
    until.py

    前端代码:用于生产异步获取首页的列表

      1 <!DOCTYPE html>
      2 
      3  <html lang="en">
      4  <head>
      5      <meta charset="UTF-8">
      6 
      7      <link rel="stylesheet" href="/static/bootstrap.css">
      8      <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
      9 
     10 </head>
     11 <body>
     12        <!-- 一下代码是数据库里面调出来的数据,然后做页面用户展示-->
     13 
     14         <table class="table table-bordered table-striped table-hover">
     15 
     16            {% for u in users %}
     17            <tr class="success">
     18                <td >{{u[0]}}</td>
     19                <td>{{u[1]}}</td>
     20                <td>
     21 
     22                    
     23          <!-- 模态窗,点击修改用户名密码的按钮,会跳出一个窗口-->
     24                 <!-- Button trigger modal -->
     25           <span data-userr="{{u[0]}}" class="edituser-btn glyphicon glyphicon-edit" aria-hidden="true" data-toggle="modal" data-target="#yourModal"></span>
     26 
     27                 <!-- Modal -->
     28                 <div class="modal fade  bs-example-modal-sm" id="yourModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
     29                   <div class="modal-dialog modal-sm" role="document">
     30                     <div class="modal-content">
     31                       <div class="modal-header">
     32                         <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
     33                         <h4 class="modal-title" id="myModalLabel">Change Password</h4>
     34                       </div>
     35                       <div class="modal-body">
     36   <!-- 跳出修改密码的窗口,这是窗口的内容-->
     37 
     38  <form method='post' class="form-horizontal" >
     39     <input type='hidden' name='user' value="{{u[0]}}">
     40 
     41     <div class="form-group form-group-sm">
     42       <label for="inputPassword3" class="col-sm-2 control-label">oldpwd</label>
     43       <div class="col-sm-8">
     44         <input type="text" class="oldpwd-input form-control" id="inputPassword3" placeholder="oldpwd"  name='oldpwd'>
     45       </div>
     46     </div>
     47   
     48     <div class="form-group form-group-sm" >
     49       <label class="col-sm-2 control-label">newpw</label>
     50       <div class="col-sm-8">
     51         <input type="text" class="newpwd-input form-control"  name='newpwd'>
     52       </div>
     53     </div>
     54   
     55     
     56     <div class="form-group form-group-sm">
     57       <label class="col-sm-2 control-label">confirm</label>
     58       <div class="col-sm-8">
     59         <input type="text" class="confirmpwd-input form-control"  name='confirmpwd'>
     60       </div>
     61     </div>
     62    <!--    
     63      oldpwd:<input class='oldpwd-input' type='text' name='oldpwd'>
     64      <br >
     65      newpwd:<input class='newpwd-input' type='text' name='newpwd'>
     66      <br >
     67      confirmpwd:<input class='confirmpwd-input' type='text' name='confirmpwd'>
     68      <br >
     69     -->
     70     
     71  </form>
     72     
     73                       </div>
     74                       <div class="modal-footer">
     75                         <button type="button" class="btn btn-success" data-dismiss="modal">Close</button>
     76                         <button type="button" data-userr="{{u[0]}}" class="update-pwd btn btn-success"  >Update</button>
     77                       </div>
     78                     </div>
     79                   </div>
     80                 </div>
     81 
     82 
     83                </td>
     84   <!-- 模态窗结束-->
     85                 <!-- 用户删除-->
     86                <td>
     87                    {% if user=='admin' %}
     88                            <span data-user="{{u[0]}}" class="deluser-btn glyphicon glyphicon-trash" aria-hidden="true"></span>
     89                    {% endif %}
     90 
     91                </td>
     92 
     93            </tr>:
     94 
     95            {% endfor %}
     96            <!--
     97              <div class="row">
     98                <div class='col-md-4 col-md-offset-4'>
     99                   <a href="/logout" class='btn btn-success'>logout</a>
    100               </div>
    101            </div>
    102            -->
    103     </table>
    104 
    105 
    106 
    107 
    108 
    109 
    110 
    111 
    112 
    113 <script src="/static/jquery.min.js"></script>
    114 <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    usertemp.html

    主要的ajax、jquery的操作

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4     
      5     <link rel="stylesheet" href="/static/bootstrap.css">
      6     <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css">
      7 
      8 </head>
      9 <body>
     10 <p id='content'>
     11 
     12 </p>
     13 
     14  <!-- 这个是ajax异步获取来的用户列表展示页面显示的地方-->
     15 <div class='row'>
     16     <div class='col-md-4 col-md-offset-4' id='user-table'>
     17 
     18     </div>
     19 </div>
     20 
     21 
     22 
     23  <!--logout button 和增加用户的模态框按钮 -->
     24 <div class="col-md-4 col-md-offset-4">
     25  
     26       <a href="/logout" class='btn btn-success'>logout</a>
     27             
     28        <!-- Button trigger modal -->
     29         <button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
     30            ADD USER
     31         </button>
     32 
     33         <!-- Modal -->
     34         <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
     35           <div class="modal-dialog" role="document">
     36             <div class="modal-content">
     37               <div class="modal-header">
     38                 <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
     39                 <h4 class="modal-title" id="myModalLabel">Modal title</h4>
     40               </div>
     41               <div class="modal-body">
     42 
     43  <!--跳出来的增加用户的界面, -->
     44 <form action='/adduser' class='form-inline' method='post'>
     45 
     46     <div class='form-group'>
     47         <label>User</label>
     48         <input type='text' id='adduser-input' name='user' class='form-control'>
     49     </div>  
     50 
     51     <div class='form-group'>
     52         <label>Pwd</label>
     53         <input type='text' id='addpwd-input' name='pwd' class='form-control'>
     54     </div>  
     55 
     56 </form>
     57 
     58               
     59               </div>
     60               <div class="modal-footer">
     61                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
     62                    <button type="button" class="btn btn-success" id='confirm-adduser'>Add</button>
     63               </div>
     64             </div>
     65           </div>
     66         </div>
     67         
     68 </div>
     69  <!-- 模态框结束--> 
     70 
     71 <script type="text/javascript" src='/static/jquery.min.js'></script>
     72 <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
     73 <script>
     74 
     75   <!-- ajax 实现更改用户的密码,然后传递给后端去操作,前端做展示-->
     76 $(document).on('click','.update-pwd',function(){
     77     var user = username
     78     var oldpwd = $(" input[ name='oldpwd' ] ").val()
     79     var newpwd = $(" input[ name='newpwd' ] ").val()
     80     var confirmpwd = $(" input[ name='confirmpwd' ] ").val()
     81     if(newpwd != confirmpwd){
     82          alert('The two new password not match!!')
     83       
     84     }
     85     $.post('/changepw',{'user':username,'oldpwd':oldpwd,'newpwd':newpwd,'confirmpwd':confirmpwd},function(data){
     86         if(data != 'ok'){
     87           alert('The old password is not correct!!')
     88         } 
     89         if(data == 'ok'){
     90            $(".modal-backdrop").remove();
     91            getUser()
     92           $('#yourModal').modal('hide')
     93 
     94         }     
     95     })
     96 })
     97  <!-- 这一步是为了获取点击用户按钮时,是对哪个用户做的操作,存到username变量中,然后传递给上面的更改密码做使用-->
     98 
     99 $(document).on('click','.edituser-btn',function(){
    100     username=$(this).data('userr')     
    101     alert(username)
    102 
    103 })
    104 
    105  <!-- 删除用户,直接拼凑删除用户的url来做删除-->
    106 $(document).on('click','.deluser-btn',function(){
    107     var user = $(this).data('user')   
    108     $.get('/delete?user='+user,function(res){
    109     
    110         if(res=='ok'){
    111         
    112             alert('delete success!!')
    113             getUser()
    114         }
    115     })
    116 })
    117  <!-- 利用函数来对获取到的页面做展示-->
    118 function getUser(){
    119     $.get('/usertemp',function(data){
    120         $('#user-table').html(data)
    121     })
    122 }
    123  <!-- 执行以下这个函数,就会显示这个页面,第一次登陆进来的时候做展示-->
    124 getUser()
    125  <!-- 增加用户操作-->
    126 $('#confirm-adduser').on('click',function(){
    127     var user = $('#adduser-input').val()
    128     var pwd = $('#addpwd-input').val()
    129     var url = '/adduser?user='+user+'&pwd='+pwd
    130     $.get(url,function(data){
    131        if(data=='ok'){
    132             $('#myModal').modal('hide')
    133             getUser()
    134        }
    135     })
    136 })
    137 
    138 
    139 </script>
    140 
    141 
    142 
    143 </body>
    index.html
  • 相关阅读:
    正常安装selenium后,pycharm导入selenium失败
    python+selenium自动化的准备 2:安装python 3.7.4 和selenium 2.53.1
    python+selenium自动化的准备 1:安装浏览器(火狐)及浏览器插件firebug与firepath、selenium IDE
    虚拟机安装win10系统
    官网下载Windows 10 系统的iso镜像文件
    电脑系统属性中用户与系统环境变量的区别
    验证器
    EchoMode的显示效果
    文本框类控件
    QLabel标签快捷键的使用
  • 原文地址:https://www.cnblogs.com/nopnog/p/7154710.html
Copyright © 2020-2023  润新知