我的编程空间,编程开发者的网络收藏夹
学习永远不晚

我的python学习--第十一天

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

我的python学习--第十一天

上午:

  1. 作业讲解

  2. bootstrap-multiselect插件

  3. sweetalert插件

下午:

  1. datatables----表格插件

  2. datetimepicker----时间插件

  3. Validform----表单验证插件

  4. 锁定用户禁止登录----逻辑端对用户状态判断

  5. 更优雅的显示仪表盘----使用jinja2模板{%if ...%}在前端判断

  6. 密码加密

  7. 包结构

  8. 总结



插件调用步骤:

  1. 下载插件包

  2. 在html页面中引入下载好的插件文件(css,js)

  3. 具体操作----查看官方文档



一、bootstrap-multiselect插件

Bootstrap Multiselect是个jQuery基础插件,提供一个很直观的用户界面,使用选项输入多个属性。这个插件代替了Bootstrap的按钮,提供一个下拉菜单,里面包含多个选项复选框。

//引入multiselect插件的css,js文件
<script type="text/javascript" class="lazy" data-src="js/bootstrap-multiselect.js"></script>
<link rel="stylesheet" href="css/bootstrap-multiselect.css" type="text/css"/>
<!--  构建一个select  -->
<select id="example-getting-started" multiple="multiple">
    <option value="cheese">Cheese</option>
    <option value="tomatoes">Tomatoes</option>
    <option value="mozarella">Mozzarella</option>
    <option value="mushrooms">Mushrooms</option>
    <option value="pepperoni">Pepperoni</option>
    <option value="onions">Onions</option>
</select>
//调用插件
<script type="text/javascript">
    $(document).ready(function() {
        $('#example-selectAllJustVisible').multiselect({
            enableFiltering: true,
            includeSelectAllOption: true,
            selectAllJustVisible: false
        });
    });
</script>


效果图

wKiom1fWOUTjTEe7AAAZ8mUq_lc591.png

学习地址:http://davidstutz.github.io/bootstrap-multiselect/



二、sweetalert插件

//引入sweetalert插件的css,js文件
<link rel="stylesheet" type="text/css" href="/static/css/sweetalert.css">
<script class="lazy" data-src="/static/js/sweetalert.min.js"></script>
//调用插件
$('#loginbtn').on('click',function(){
     var str = $('#loginForm').serialize()
     console.log(str) 
     $.post("/login",str,function(data){
          console.log(data)    
          data = JSON.parse(data)
          console.log(data)  
          if (data['code']==0){
            swal({
                title: '登录成功',
                text: data['result'],
                type: 'success',
                confirmButtonText: '确定'
            },function(){
                location.href='/'
            });
          }else{
            swal('Sorry',data['errmsg'],'error')
           }
     })
      return false
})


效果图

wKiom1fWP66BHwTXAAAlbEClDvQ168.png


格式

swal(标题,提示内容,事件类型) #标题和事件类型可缺省


学习地址:http://t4t5.github.io/sweetalert/



三、datatables表格插件

//引入datatables插件的css,js文件
<link href="/static/css/dataTables.min.css" rel="stylesheet">
<script class="lazy" data-src="/static/js/dataTables.min.js"></script>
//调用datatables插件
$('#editable').DataTable({
    //并将dataTable()返回的结果保存在变量中,方便多次调用
    "bDestroy": true, 
    //用中文显示提示信息
    "language": {
        "lengthMenu": "每页 _MENU_ 条记录",
        "zeroRecords": "没有找到记录",
        "sInfo": "第 _PAGE_ 页 ( 总共 _PAGES_ 页 ),显示第 _START_ 至 _END_ 项(总共 _TOTAL_ 项)",
        "infoEmpty": "无记录",
        "infoFiltered": "(从 _MAX_ 条记录过滤)",
        "sSearch": "搜索:",
        "oPaginate": {
        "sFirst": "首页",
        "sPrevious": "上一页",
        "sNext": "下一页",
        "sLast": "末页"
        }
    },
    //第二列,正序排列
    "order": [[ 1,"asc" ]]
});


效果图

wKioL1fWQzWwYAPBAACt4tuzef4746.png

学习地址:https://datatables.net



四、datetimepicker----时间插件

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Datepicker</title>
  <!-- 引入datetimepicker插件的css文件 -->
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">
</head>
<body>
<p>Date: <input type="text" id="datepicker"></p>

<script class="lazy" data-src="

<!-- 引入datetimepicker插件的js文件 --> 
<script class="lazy" data-src="http://code.jquery.com/ui/1.11.4/jquery-ui.js "></script>
  <script>
    $( "#datepicker" ).datepicker();
  </script>

</body>
</html>


效果图

wKioL1fWSDCg0XC9AABDV3F2BHk414.png

学习地址:http://www.jq22.com/jquery-info332



五、Validform----表单验证插件

//引入css,js文件
<script type="text/javascript" class="lazy" data-src="
 </script><script type="text/javascript" class="lazy" data-src="http://validform.rjboy.cn/Validform/v5.1/Validform_v5.1_min.js"></script>
<!--  给需要验证的表单元素绑定附加属性  -->
<form class="demoform">
<input type="text" value="" name="name" datatype="s5-16" errormsg="昵称至少5个字符,最多16个字符!" />
</form>
//初始化表单
$(".demoform").Validform();


示例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Demo - Validform</title>
<link rel="stylesheet" href="static/css/style.css" type="text/css" media="all" />
<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css">

</head>

<body>  
<div class="main">
    <div class="wraper">
    
        
        <form id="registerform" >
            <table width="100%" style="table-layout:fixed;">
                <tr>            
                    <td style="width:70px;">中文名:</td>
                    <td style="width:205px;"><input type="text" value="" name="name" class="inputxt"  datatype="z2-4" nullmsg="请输入中文名!" errormsg="中文名为2~4个中文字符!" /></td>                   
                </tr>
                <tr>...</tr>
                <tr>...</tr>
                <tr>...</tr>
                <tr>...</tr>
            </table>
        </form>
        
      
    </div>
</div>

<div id="container" style="min-width:800px;height:400px;"></div>

<script class="lazy" data-src="http://code.jquery.com/jquery-1.12.2.js"></script>
<script class="lazy" data-src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>

<script class="lazy" data-src="http://validform.rjboy.cn/Validform/v5.3.2/Validform_v5.3.2_min.js"></script>
<script type="text/javascript" class="lazy" data-src="http://cdn.hcharts.cn/highcharts/highcharts.js"></script>
//自定义2-4位中文字符 
<script type="text/javascript">
$("#registerform").Validform({
    tiptype:3, 
    datatype:{
        "zh2-4" : /^[\u4E00-\u9FA5\uf900-\ufa2d]{2,4}$/,                    
    }    
})
</script>
</body>
</html>


效果图

wKiom1fWTTSz66Q4AAAOnBrO9W0586.png


内置基本的datatype类型有: 

* | *6-16 | n | n6-16 | s | s6-18 | p | m | e | url

  • *:检测是否有输入,可以输入任何字符,不留空即可通过验证;

  • *6-16:检测是否为6到16位任意字符;

  • n:数字类型;

  • n6-16:6到16位数字;

  • s:字符串类型;

  • s6-18:6到18位字符串;

  • p:验证是否为邮政编码;

  • m:手机号码格式;

  • e:email格式;

  • url:验证字符串是否为网址。


学习地址:http://validform.rjboy.cn/document.html



六、对密码进行加密

方法:通过python的hashlib模块的md5摘要算法对密码进行加密,获取其十六进制摘要并保存到数据库。验证时只需要对输入的密码做相同操作,结果相同则验证成功,否则失败。通过‘加盐’的方法可以提高密码的安全性。

>>> import hashlib
>>> salt = '123'
>>> password = 'abc'
>>> hashlib.md5(password+salt).hexdigest()
'e99a18c428cb38d5f260853678922e03'


if request.method == 'POST':        
    l = []
    data = dict((k,v[0]) for k,v in dict(request.form).items())
    for i in db.list('users',fields_user):
        l.append(i['name'])
    if not data['name']:
        return json.dumps({'code':1,'errmsg':'name can not be null'})
    elif not data['name_cn']:           
        return json.dumps({'code':1,'errmsg':'chinese name can not be null'})
    elif not data['password']:          
        return json.dumps({'code':1,'errmsg':'password can not be null'})
    elif data['name'] not in l:
        # 对密码使用md5加密
        data['password'] = hashlib.md5(data['password']+salt).hexdigest()
            
        conditions = [ "%s='%s'" %  (k,v) for k,v in data.items()]
        db.add('users',conditions)      
        return json.dumps({'code':0,'result':'add user success'})
    return json.dumps({'code':1,'errmsg':'username is exist'})



七、包结构

目录结构:

[root@yao day_11_package]# tree
.
├── app
│   ├── admin.py
│   ├── __init__.py
│   └── views.py
└── run.py

内容:

[root@yao day_11_package]# cat run.py 
from app import app 
if __name__=='__main__':
    app.run(host='0.0.0.0',port=9898,debug=True)
    
    
[root@yao day_11_package]# cat app/__init__.py 
from flask import Flask
app = Flask(__name__)
import admin,views


[root@yao day_11_package]# cat app/admin.py 
from flask import render_template
from . import app
@app.route('/admin')
def admin():
    return render_template('admin.html')
    
    
[root@yao day_11_package]# cat app/views.py 
from flask import render_template
from . import app
@app.route('/views')
def views():
    return render_template('views.html')


什么是包?

答:一个目录里面,如果存在__init__.py文件,那么这个目录就可以称之为包。

包有什么用?

答:包将有联系的模块组织在一起,有效避免模块名称冲突问题,让应用组织结构更加清晰。

如何导入包中的模块?

答:使用‘import’,通过from '包名' import '模块名' 实现导入。



八、总结



wKiom1fWZQ_RJlTpAAH6LV4PcaE194.png

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

我的python学习--第十一天

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

我的python学习--第十一天

上午:作业讲解bootstrap-multiselect插件sweetalert插件下午:datatables----表格插件datetimepicker----时间插件Validform----表单验证插件锁定用户禁止登录----逻辑端对
2023-01-31

我的python学习--第十四天(一)

一、运维管理系统(基于Flask)回顾1、权限控制  通过session实现权限控制,session是一个全局字典,当用户登录时,可以获取到用户的用户名,通过查找数据库获取用户的权限保存进session中,在每次页面跳转时同过查询sessi
2023-01-31

我的python学习--第十三天

nginx + uwsgi + flask一、安装1、安装uwsgi[root@yaoliang day_13]# wget http://projects.unbit.it/downloads/uwsgi-2.0.4.tar.gz[roo
2023-01-31

我的python学习--第十二天(二)

Python异常处理  Python的异常处理能力是很强大的,可向用户准确反馈出错信息。在Python中,异常也是对象,可对它进行操作。所有异常都是基类Exception的成员,所有异常都从基类Exception继承,而且都在excepti
2023-01-31

学习python的第二十一天(loggi

1.logging模块用于程序的运行日志1.初级#首先程序运行分会出现5中情况1.logging.info('info') #程序正常运行级别为102.logging.debug('debug') #程序调试级别为203.
2023-01-31

学习python的第二十一天(hashl

1.hashlib模块(文件传输中将传输内容用指定算法进行处理)hash是一种算法(Python3.版本里使用hashlib模块代替了md5模块和sha模块,主要提供 SHA1、SHA224、SHA256、SHA384、SHA512、MD5
2023-01-31

我的python学习--第三天

第三天  1:列表及Python基础回顾  2:字典 列表字典生成式及应用场景  3:字符串 字典字符串转换及应用场景  4:文件操作 文件字典转换及应用场景  5:总结基础数据结构的知识脑图 -- 增删查改1、列表的操作:  help(l
2023-01-31

我的python学习--第四天

一、首先是对前三天的学习内容进行复习  1、python基础的数据结构      数字(int/float,包括整数和浮点数)          布尔(boolean => True/False)      字符串(str,使用''或""括
2023-01-31

我的python学习--第五天

一、函数的定义:  def 函数名(name,age=20,*params):    函数体    return 返回值  示例:def hello():    print 'hello world'               # pri
2023-01-31

我的python学习--第七、八天

Flask的HTTP方法HTTP(与web应用会话的协议)有许多不同的URL方法。默认情况下,路由只回应GET请求,但是通过route()装饰器传递methods参数可以改变这个行为。HTTP方法告知服务器,客户端想对请求的页面 做些什么。
2023-01-31

学习python的第二十天(dateti

1.datetime模块(用于修改日期)import datetimeprint(datetime.datetime.now(),type(datetime.datetime.now()))2019-06-10 19:37:55.77688
2023-01-31

学习python的第十一天(集合数据类型

1.集合数据类型1.定义用{}中间值用,隔开,且集合中元素排列是无序的,而且如果有相同元素会只保留一个2.算法1.必须掌握1.长度lenset_1 = {1,2,3,4,5}print(len(set_1))#52.成员运算in和not i
2023-01-31

学习python的第二十天(time模块

1.三种时间的显示样式1.时间戳1.相关函数1.time()2.显示样式import timeprint(time.time())#1560150343.5837357 距离计算机元年1970年1月1日00:00:0的过去了多少秒2.结构化
2023-01-31

学习python的第二十天(json模块

1.josn模块(用于指定数据类型文件快速读写修改)1.指定的数据类型dict(字典)str(字符串)int/float(整型/浮点型)bool中的False,True,None2.dumps/loadsloads用于内存中修改,把dump
2023-01-31

学习python的第二十天(os模块,s

1.os模块(功能类似操作系统与文件交互)1.常用模块功能1.创建文件1.mkdir2.移除文件1.remove删除指定文件2.rmdir删除单级空目录,若目录不为空则无法删除3.removedirs若目录为空,则删除,并递归到上一级目录,
2023-01-31

学习python的第十二天(编码,解码,

1.编码解码1.字符串编码字符 --------》翻译过程 -------》数字2.字符串解码字符 --------》翻译过程 -------》数字3.编码解码用到的翻译工具中国:GBK外国:日本—Shift_JIS,美国ASCII,韩国E
2023-01-31

Python学习笔记:第一天python

目录 1. python简介 2. python的安装 3. 编写第一个helloword 4. 变量和常量 5. 数据类型 6.
2023-01-30

学习python的第十九天(包,软件开发

1.包1.什么是包包是模块的一种形式,包的本质就是一个含有__init__.py的文件的文件夹2.为什么用包当一个模块功能太多的时候不方便进行管理,我们用包来进行管理3.包的使用1.导入包发生的三件事创建一个包的名称空间由于包是一个文件夹,
2023-01-31

学习python的第十四天(可变长参数,

一.可变长参数1.可变长形参之(*)形参中的会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给后的参数。需要注意的是:*后的参数名约定俗成为args。def sum_self(*args): res = 0 for
2023-01-31

学习python的第十七天(二分法,有名

一.二分法二分法个人理解是一种算法的方式在一个有序的序列,区中间值,把中间值与想要的值进行对比从而一次一次的减少搜索范围举例#给与一个列表1-100,num_list = [num fornum in range(1,101)]#给予一个n
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录