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请求提交获取参数的样例已经实现。

前段内容回顾

  1. html
    head
    style 手写css
    link 引入css
    body
    h1~h6 标题
    table 表格
    tr,td
    form 表单
    input ,button
    p 段落
    img 图片
    a 超链接
  2.  
  3. div span (这两个没有默认的样式,一个是盒子,一个事行内元素)
  4.  
  5. script #引入js

选择器

1、元素选择器

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

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

  1. #part1{
    color:blue;
    }

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

  1. .font-yellow{
    color:yellow;
    }
  2.  
  3. 当引用class选择器的时候,也可以选择多个, 如:
    <div class'font-yellow font-30'>hello</div>

4、属性选择器

  1. <div xxx='reoboot'> hello div </div>
    <div xxx='python'> hello again </div>
  2.  
  3. [xxx='reboot']{
    color:red;
    }
    这样的话,只有第一行会引用到,
    [xxx]{
    color:red;
    }
    这样的话,两行都会被引用到了

5、层级选择器

  1. <div>
    <p> 一个段落 </p>
    </div>
    <p> 第二个段落 <p>
  2.  
  3. div p{
    color:red;
    }
    这样的话,只有第一个会被引用到。

Jquery

  1. 用法:
    $(选择器).操作函数()
    html 操作或者获取元素的内容
    val 操作或者获取输入框的值
    on 绑定事件
    find(选择器) 查找元素的内容
    .show 显示
    .hide 隐藏
    css 修改css样式
  1. <div>
    <p> </p>
    <div>
    <button id='click-btn' class="btn btn-success">
    </button>
    <input type="text' id='test'>
  2.  
  3. <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')
  4.  
  5. })
    $('#test').val('hello python')
  6.  
  7. </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,命名重复了。

 

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

  1. <body>
  2. <p>
  3. 输入框的长度校验
  4. </p>
  5. username:<input id="test-input" type="text" name="usename">
  6. <button id="hello">hello</button>
  7.  
  8. <script src="./jquery.min.js"></script>
  9. <script>
  10. var input=$('#test-input')
  11. input.on('change',function(){
  12. var vall=$(this).val()
  13. if(vall.length>10){
  14. alert('too long!')
  15. }else if(vall.length<3){
  16. alert('too short!!')
  17. }
  18. })
  19.  
  20. </script>
  21.  
  22. </body>

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

  这里复习一下val的用法:  

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

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

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

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

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

绑定事件需要注意的事项  

  1. <body>
  2.  
  3. <button id="hello">hello</button>
  4. <button id="world">world</button>
  5. <script src="./jquery.min.js"></script>
  6. <script>
  7. $(document).on('click','#hello',function () {
  8. $('#world').on('click',function () {
  9. alert('world')
  10. })
  11. })
  12.  
  13. </script>
  14.  
  15. </body>

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

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

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

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

  1.   $('#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. if __name__=="__main__":
  98. app.run(host='0.0.0.0',port=33333,debug=True)

数据库代码:

  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. def app_index():
  13. con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
  14. con.autocommit(True)
  15. cur =con.cursor()
  16. cur.execute(sql_all)
  17. res = cur.fetchall()
  18. cur.close()
  19. con.close()
  20. return res
  21.  
  22. def app_login(username,passwd):
  23. con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
  24. con.autocommit(True)
  25. cur =con.cursor()
  26. cur.execute(sql_login%(username,passwd))
  27. res = cur.fetchone()
  28. cur.close()
  29. con.close()
  30. return res
  31.  
  32. def app_delete(username):
  33. con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
  34. con.autocommit(True)
  35. cur =con.cursor()
  36. cur.execute(sql_delete%(username))
  37. res = cur.fetchone()
  38. cur.close()
  39. con.close()
  40.  
  41. def app_adduser(username,passwd):
  42. con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
  43. con.autocommit(True)
  44. cur =con.cursor()
  45. cur.execute(sql_adduser%(username,passwd))
  46. res = cur.fetchone()
  47. cur.close()
  48. con.close()
  49.  
  50. def app_updatepw(passwd,username):
  51. con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
  52. con.autocommit(True)
  53. cur =con.cursor()
  54. cur.execute(sql_updatepw%(passwd,username))
  55. res = cur.fetchone()
  56. cur.close()
  57. con.close()
  58.  
  59. def app_getpw(username):
  60. con = mysql.connect(host=ST,port=DB_PORT,user=DB_USER,passwd=DB_PASSWD,db=DB_DBNAME,charset=DB_CHARSET)
  61. con.autocommit(True)
  62. cur =con.cursor()
  63. cur.execute(sql_getpw%(username))
  64. res = cur.fetchone()
  65. cur.close()
  66. con.close()
  67. 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. <!-- Button trigger modal -->
  24. <span data-userr="{{u[0]}}" class="edituser-btn glyphicon glyphicon-edit" aria-hidden="true" data-toggle="modal" data-target="#yourModal"></span>
  25.  
  26. <!-- Modal -->
  27. <div class="modal fade bs-example-modal-sm" id="yourModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  28. <div class="modal-dialog modal-sm" role="document">
  29. <div class="modal-content">
  30. <div class="modal-header">
  31. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  32. <h4 class="modal-title" id="myModalLabel">Change Password</h4>
  33. </div>
  34. <div class="modal-body">
  35. <!-- 跳出修改密码的窗口,这是窗口的内容-->
  36.  
  37. <form method='post' class="form-horizontal" >
  38. <input type='hidden' name='user' value="{{u[0]}}">
  39.  
  40. <div class="form-group form-group-sm">
  41. <label for="inputPassword3" class="col-sm-2 control-label">oldpwd</label>
  42. <div class="col-sm-8">
  43. <input type="text" class="oldpwd-input form-control" id="inputPassword3" placeholder="oldpwd" name='oldpwd'>
  44. </div>
  45. </div>
  46.  
  47. <div class="form-group form-group-sm" >
  48. <label class="col-sm-2 control-label">newpw</label>
  49. <div class="col-sm-8">
  50. <input type="text" class="newpwd-input form-control" name='newpwd'>
  51. </div>
  52. </div>
  53.  
  54. <div class="form-group form-group-sm">
  55. <label class="col-sm-2 control-label">confirm</label>
  56. <div class="col-sm-8">
  57. <input type="text" class="confirmpwd-input form-control" name='confirmpwd'>
  58. </div>
  59. </div>
  60. <!--
  61. oldpwd:<input class='oldpwd-input' type='text' name='oldpwd'>
  62. <br >
  63. newpwd:<input class='newpwd-input' type='text' name='newpwd'>
  64. <br >
  65. confirmpwd:<input class='confirmpwd-input' type='text' name='confirmpwd'>
  66. <br >
  67. -->
  68.  
  69. </form>
  70.  
  71. </div>
  72. <div class="modal-footer">
  73. <button type="button" class="btn btn-success" data-dismiss="modal">Close</button>
  74. <button type="button" data-userr="{{u[0]}}" class="update-pwd btn btn-success" >Update</button>
  75. </div>
  76. </div>
  77. </div>
  78. </div>
  79.  
  80. </td>
  81. <!-- 模态窗结束-->
  82. <!-- 用户删除-->
  83. <td>
  84. {% if user=='admin' %}
  85. <span data-user="{{u[0]}}" class="deluser-btn glyphicon glyphicon-trash" aria-hidden="true"></span>
  86. {% endif %}
  87.  
  88. </td>
  89.  
  90. </tr>:
  91.  
  92. {% endfor %}
  93. <!--
  94. <div class="row">
  95. <div class='col-md-4 col-md-offset-4'>
  96. <a href="/logout" class='btn btn-success'>logout</a>
  97. </div>
  98. </div>
  99. -->
  100. </table>
  101.  
  102. <script src="/static/jquery.min.js"></script>
  103. <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. <!--logout button 和增加用户的模态框按钮 -->
  22. <div class="col-md-4 col-md-offset-4">
  23.  
  24. <a href="/logout" class='btn btn-success'>logout</a>
  25.  
  26. <!-- Button trigger modal -->
  27. <button type="button" class="btn btn-primary btn-sm" data-toggle="modal" data-target="#myModal">
  28. ADD USER
  29. </button>
  30.  
  31. <!-- Modal -->
  32. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  33. <div class="modal-dialog" role="document">
  34. <div class="modal-content">
  35. <div class="modal-header">
  36. <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
  37. <h4 class="modal-title" id="myModalLabel">Modal title</h4>
  38. </div>
  39. <div class="modal-body">
  40.  
  41. <!--跳出来的增加用户的界面, -->
  42. <form action='/adduser' class='form-inline' method='post'>
  43.  
  44. <div class='form-group'>
  45. <label>User</label>
  46. <input type='text' id='adduser-input' name='user' class='form-control'>
  47. </div>
  48.  
  49. <div class='form-group'>
  50. <label>Pwd</label>
  51. <input type='text' id='addpwd-input' name='pwd' class='form-control'>
  52. </div>
  53.  
  54. </form>
  55.  
  56. </div>
  57. <div class="modal-footer">
  58. <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
  59. <button type="button" class="btn btn-success" id='confirm-adduser'>Add</button>
  60. </div>
  61. </div>
  62. </div>
  63. </div>
  64.  
  65. </div>
  66. <!-- 模态框结束-->
  67.  
  68. <script type="text/javascript" src='/static/jquery.min.js'></script>
  69. <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  70. <script>
  71.  
  72. <!-- ajax 实现更改用户的密码,然后传递给后端去操作,前端做展示-->
  73. $(document).on('click','.update-pwd',function(){
  74. var user = username
  75. var oldpwd = $(" input[ name='oldpwd' ] ").val()
  76. var newpwd = $(" input[ name='newpwd' ] ").val()
  77. var confirmpwd = $(" input[ name='confirmpwd' ] ").val()
  78. if(newpwd != confirmpwd){
  79. alert('The two new password not match!!')
  80.  
  81. }
  82. $.post('/changepw',{'user':username,'oldpwd':oldpwd,'newpwd':newpwd,'confirmpwd':confirmpwd},function(data){
  83. if(data != 'ok'){
  84. alert('The old password is not correct!!')
  85. }
  86. if(data == 'ok'){
  87. $(".modal-backdrop").remove();
  88. getUser()
  89. $('#yourModal').modal('hide')
  90.  
  91. }
  92. })
  93. })
  94. <!-- 这一步是为了获取点击用户按钮时,是对哪个用户做的操作,存到username变量中,然后传递给上面的更改密码做使用-->
  95.  
  96. $(document).on('click','.edituser-btn',function(){
  97. username=$(this).data('userr')
  98. alert(username)
  99.  
  100. })
  101.  
  102. <!-- 删除用户,直接拼凑删除用户的url来做删除-->
  103. $(document).on('click','.deluser-btn',function(){
  104. var user = $(this).data('user')
  105. $.get('/delete?user='+user,function(res){
  106.  
  107. if(res=='ok'){
  108.  
  109. alert('delete success!!')
  110. getUser()
  111. }
  112. })
  113. })
  114. <!-- 利用函数来对获取到的页面做展示-->
  115. function getUser(){
  116. $.get('/usertemp',function(data){
  117. $('#user-table').html(data)
  118. })
  119. }
  120. <!-- 执行以下这个函数,就会显示这个页面,第一次登陆进来的时候做展示-->
  121. getUser()
  122. <!-- 增加用户操作-->
  123. $('#confirm-adduser').on('click',function(){
  124. var user = $('#adduser-input').val()
  125. var pwd = $('#addpwd-input').val()
  126. var url = '/adduser?user='+user+'&pwd='+pwd
  127. $.get(url,function(data){
  128. if(data=='ok'){
  129. $('#myModal').modal('hide')
  130. getUser()
  131. }
  132. })
  133. })
  134.  
  135. </script>
  136.  
  137. </body>

index.html

Python flask+css+js+ajax 综合复习的更多相关文章

  1. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (II)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架 II第二部 0. 本系列教程 1. 登录功能准备 a.python中操控mysql b. 安装数据库 c.安装mys ...

  2. #3使用html+css+js制作网页 番外篇 使用python flask 框架 (I)

    #3使用html+css+js制作网页 番外篇 使用python flask 框架(I 第一部) 0. 本系列教程 1. 准备 a.python b. flask c. flask 环境安装 d. f ...

  3. 前端和后端的数据交互(jquery ajax+python flask+mysql)

    上web课的时候老师布置的一个实验,要求省市连动,基本要求如下: 1.用select选中一个省份. 2.省份数据传送到服务器,服务器从数据库中搜索对应城市信息. 3.将城市信息返回客户,客户用sele ...

  4. 用 Flask 来写个轻博客 (28) — 使用 Flask-Assets 压缩 CSS/JS 提升网页加载速度

    Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 Flask-Assets 将 Flask-Assets 应用 ...

  5. 【Python全栈】HTML <!--...--> 注释 、CSS/JS //注释 和 /*.....*/ 注释

    HTML <!--...--> 注释 .CSS/JS //注释 和 /*.....*/ 注释 <!-- -->是HTML的注释标签,使用 < 和 > 是符合HTML ...

  6. 新浪博客:html+css+原生JS+Ajax初级+mySql数据库——源码

    **************************************************************************************************** ...

  7. python Flask JQuery使用说明

    0.前言     近期因为某种原因再次学习Flask框架.借助博客整理相关内容.Flask框架和Apache+PHP存在少许不同,Flask框架中JS和CSS文件存放于一个相对固定的位置. 普通情况下 ...

  8. #3使用html+css+js制作网页 制作登录网页

    #3使用html+css+js制作网页 制作登录网页 本系列链接 2制作登录网页 2.1 准备 2.1.1 创建文件夹 2.1.2 创建主文件 2.2 html部分 2.2.1 网站信息 2.2.2 ...

  9. flask+sqlite3+echarts2+ajax数据可视化

    前提: 准备Python + Flask+Sqlite3的平台环境(windows系统) 前面一节介绍flask怎么安装了,剩下sqlite3下载后解压,然后环境变量添加解压路径就行了 附加下载地址: ...

随机推荐

  1. Glide加载图片的事例

    //获取图片的url String url = resultsEntity.getUrl(); //判断获取的图片是否存在 if (resultsEntity.getItemHeight() > ...

  2. 图像分类丨ILSVRC历届冠军网络「从AlexNet到SENet」

    前言 深度卷积网络极大地推进深度学习各领域的发展,ILSVRC作为最具影响力的竞赛功不可没,促使了许多经典工作.我梳理了ILSVRC分类任务的各届冠军和亚军网络,简单介绍了它们的核心思想.网络架构及其 ...

  3. Java微服务 进程间通信

    目录 进程间通信 同步调用 异步调用 实现方式 进程间通信 同步调用 同步调用比较简单,一致性强,但是容易出调用问题,出现单点故障,因为之间相互依赖,比如RPC必须要依赖的模块上线可用,己方才能调用, ...

  4. jQuery测试及解析

    解析:下标从0开始 解析:最大119  解析:鼠标移过mouseover  解析:  var   变量值=变量名

  5. vue-cli脚手架(框架)

    一.创建vue项目 npm install vue-cli -g #-g全局 (sudo)npm install vue-cli -g #mac笔记本 vue-init webpack myvue # ...

  6. Todolist总结

    一.组件类里面的函数尽可能写成箭头函数的形式,方便绑定this 上面的箭头函数是好的,写面的不好,他需要在用的时候绑定this,或者在constructor绑定,如下: 如上用的时候绑定this是不好 ...

  7. Ubuntu安装新英伟达驱动出现问题解决方法

    ERROR: The Nouveau kernel driver is currently in use by your system. This driver is incompatible wit ...

  8. Objective-C Numbers

    In Objective-C programming language, in order to save the basic data types like int, float, bool in ...

  9. Jquery AJAX使用踩坑小记

    在使用jquery ajax时,如果其参数是一个json对象,将此参数使用$('#dd').data(param)绑定到一个元素上, 在使用$('#dd').bind('click',function ...

  10. 基于eclipse搭建android开发环境-win7 32bit

    基于eclipse搭建android开发环境-win7 32bit 前言:在使用朋友已搭建的Android开发环境时,发现朋友的开发环境版本较低且在update SDk时失败,便决定根据网上文章提示从 ...