当前位置:必发365电子游戏 > 编程 > 【必发365电子游戏】人最怕是不晓得,那五个库会自动安装上
【必发365电子游戏】人最怕是不晓得,那五个库会自动安装上
2019-12-19

看别人用的依据库的受益在于,你明白有如何能够用,什么能够借鉴。(钉钉——合营桌面应用)

Flask信赖七个外表库:

PS:人最怕是不知道,实际不是你不会。

1. jQuery

利用pip安装flask的时候,那八个库会自动安装上。

钉钉使用了1.9.1版本的jQuery,jQuery作为一个最佳分布运用库,已经不用表明它是哪些了。

pip install Flask

学学地方:

Jinja2

先轻便的牵线下Jinja2:
Jinja2是二个两全灵活、神速和安全的python模板库。

pip install Jinja2

from jinja2 import Template
template=Template('Hello {{ name }}!')
template.render(name='jinglepp')

必发365电子游戏 1

jinja2示例

经过创造二个Template实例拿到八个新的模板对象,它提供了三个名称为render(卡塔尔(英语:State of Qatar)的措施,该情势调用使用dict或要害字参数进行模板。传递给模板的dict或重大字参数被叫作模板的context.

jinja2里头接收unicode.
可以在python模块的首行或第二行设置python编码

# -- coding: utf-8 --

from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))

那将会以暗中同意值创造多少个模板意况和一个在现阶段利用python包中的templates文件夹中找找模板的加载器。多少个加载器是可用的,就算有亟待从数据库或其余财富加载模板,能够团结写多少个。
您只须要调用get_template(卡塔尔国方法从这么些条件中加载模板并回到已加载的Template:

template=env.get_template('mytemplate.html')

运用部分变量渲染模板只须求调用render(卡塔尔国:

print(template.render(the='variables',go='here')

必发365电子游戏,选用模板加载器实际不是向Template或Environment.from_string(卡塔尔(英语:State of Qatar)传递字符串有那多少个收益,并且也使得模板世襲成为恐怕。

PS:Includes Sizzle.js

Werkzeug

Werkzeug是Python的WSGI标准的实用函数库。使用大面积,基于BSD公约.

pip install Werkzeug

您能够行使 pip 来设置注重库:

pip install Jinja2 redis

一向写WSGI程序有一点点啰嗦,小编应当超少情形下会用到这么底层的代码。
直接上个官方教程里的事例吗,原本的例子是python2的,作者用的是python3,就本身边敲边改下。
出于还亟需设置redis,作者也不会用到它,不想安装,不能测验上边包车型大巴代码通过不经过

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
import redis
from urllib.parse import urlparse
from werkzeug.wrappers import Request, Response
from werkzeug.routing import Map, Rule
from werkzeug.exceptions import HTTPException, NotFound
from werkzeug.wsgi import SharedDataMiddleware
from werkzeug.utils import redirect
from jinja2 import Environment, FileSystemLoader


class Shortly():
    def __init__(self, config):
        self.redis = redis.Redis(config['redis_host'], config['redis_port'])
        template_path = os.path.join(os.path.dirname(__file__), 'templates')
        self.jinja_env = Environment(loader=FileSystemLoader(template_path), autoescape=True)
        self.url_map = Map([
            Rule('/', endpoint='new_url'),
            Rule('/<short_id>', endpoint='follow_short_link'),
            Rule('/<short_id>+', endpoint='short_link_details')
        ])

    def render_template(self, template_name, **context):
        t = self.jinja_env.get_template(template_name)
        return Response(t.render(context), mimetype='text/html')

    def dispatch_request(self, request):
        # return Response('Hello World!')
        adapter = self.url_map.bind_to_environ(request.environ)
        try:
            endpoint, values = adapter.match()
            return getattr(self, 'on_' + endpoint)(request, **values)
        except HTTPException as e:
            return e

    def wsgi_app(self, environ, start_response):
        request = Request(environ)
        response = self.dispatch_request(request)
        return response(environ, start_response)

    def __call__(self, environ, start_response):
        return self.wsgi_app(environ, start_response)

    # 视图
    def on_new_url(self, request):
        error = None
        url = ''
        if request.method == 'POST':
            url = request.form['url']
            if not is_valid_url(url):
                error = "请输入一个有效的URL"
            else:
                short_id = self.insert_url(url)
                return redirect('/%s+' % short_id)
            return self.render_template('new_url.html', error=error, url=url)

    def on_follow_short_link(self, request, short_id):
        link_target = self.redis.get('url-target:' + short_id)
        if link_target is None:
            raise NotFound()
        self.redis.incr('click-count:' + short_id)
        return redirect(link_target)

    def on_short_link_details(self, request, short_id):
        link_target = self.redis.get('url-target:' + short_id)
        if link_target is None:
            raise NotFound()
        click_count = int(self.redis.get('click-count:' + short_id) or 0)
        return self.render_template('short_link_details.html',
                                    link_target=link_target,
                                    short_id=short_id,
                                    click_count=click_count
                                    )

    def insert_url(self, url):
        short_id = self.redis.get('reverse-url:' + url)
        if short_id is not None:
            return short_id
        url_num = self.redis.incr('last-url-id')
        short_id = base36_encode(url_num)
        self.redis.set('url-target:' + short_id, url)
        self.redis.set('reverse-url:' + url, short_id)
        return short_id


def create_app(redis_host='localhost', redis_port=6379, with_static=True):
    app = Shortly({
        'redis_host': redis_host,
        'redis_port': redis_port
    })
    if with_static:
        app.wsgi_app = SharedDataMiddleware(app.wsgi_app, {
            '/static': os.path.join(os.path.dirname(__file__), 'static')
        })
    return app


def is_valid_url(url):
    parts = urlparse(url)
    return parts.scheme in ('http', 'https')


def base36_encode(number):
    assert number >= 0, "需要大于0的整数"
    if number == 0:
        return '0'
    base36 = []
    while number != 0:
        number, i = divmod(number, 36)
        base36.append('0123456788abcdefghijklmnopqrstuvwxyz'[i])
        return ''.join(reversed(base36))


if __name__ == '__main__':
    from werkzeug.serving import run_simple

    app = create_app()
    run_simple('127.0.0.1', 5000, app, use_debugger=True, use_reloader=True)

那个底工应该在学Flask的时候应该丰富了,相当不够的地点能够再去查文书档案。

2. jQuery Hotkeys

jQuery插件,可用来监听键盘事件,差不离支持具有的组合键。

学学地点:

示例:

$(document).on('keydown', null, 'ctrl+a', function(e){
      console.log('ctrl+a!!', e);
});

3. jQuery Caret

jQuery插件,管理文本框的插入地方。

学学地点:

4. jQuery atwho

jQuery插件,自动完结提示插件(autocomplete mentions),相同今日头条的@作用。

必发365电子游戏 2

必发365电子游戏 3.png)

读书地点:

示范地址: (帮忙Textarea、ContentEditable、CKeditor等富文本编辑器)

PS:基于Caret.js

5. jQuery tooltips

jQuery插件,三个轻便的唤起插件,风格挺舒服的。

必发365电子游戏 4

必发365电子游戏 5.png)

学学地点:

PS:这只是formstone在那之中多少个库,还也可以有任何有意思的。

6. jQuery mousewheel

jQuery插件,用于增多跨浏览器的鼠标滚轮协助。

mousewheel事件的管理函数有几许纤维的扭转,它除了第二个参数event 外,还接收到第贰个参数delta。通过参数delta能够拿到鼠标滚轮的来头和进程。

学习地方:

示例:

$('#my_elem').on('mousewheel', function(event) {
    console.log(event.deltaX, event.deltaY, event.deltaFactor);
});

7.  QR Code Generator

二维码生成器,纯前端生成。

学习地点:

示例:

HTML:

<div id="code"></div>

JS:

var typeNumber = 4;
var errorCorrectionLevel = 'L';
var qr = qrcode(typeNumber, errorCorrectionLevel);
qr.addData('Hi!');
qr.make();
document.getElementById('code').innerHTML = qr.createImgTag();

PS:别的语言的该小编也会有提供。

8. libphonenumber

Google的JavaScript库,用于深入深入分析,格式化和校验国际电话号码。

学习地点:

9. Underscore.js

Underscore叁个JavaScript实用库,提供了一站式函数式编制程序的实用功用,可是未有扩张任何JavaScript内置对象。

必发365电子游戏 6

学学地点:

PS:那么些真是个不错的库。

10. AngularJS

AngularJS是二个框架(不是库),在作者回想里最大的表征是双向数据绑定。

学习地点1: http://angularjs.org

上学地方2: 

AngularJS拓宽指令

1. angular-qrcode 

An AngularJS directive to creates QR Codes using Kazuhiko Arase’s qrcode-generator library.

上学地方:

2. angular-ui/ui-select2

This directive allows you to enhance your select elements with behaviour from the select2 library.(这些命令已经不适当时候宜。)

学学地点:

PS:那些命令依赖的jQuery select2库(【必发365电子游戏】人最怕是不晓得,那五个库会自动安装上。),这几个库特不易,效果如下:必发365电子游戏 7 

3. others

再有使用到任何AngularJS拓宽指令, 可在这里查看:

 

正文为原创小说,转发请保留原出处,方便溯源,如有错误地点,多谢指正。

正文地址 :