• python web开发细节


    开发前所做准备:

    创建虚拟环境:

    Ubuntu用户使用如下命令进行安装:

    $ sudo apt-get install python-virtualenv

    Mac OS X系统

    $ sudo easy_install virtualenv

    如果你使用微软的Windows系统或其他没有官方virtualenv包的操作系统,那么安装过程要稍微复杂一点,在浏览器中输入网址https://bitbucket.org/pypa/setuptools,回车后会进入setuptools安装程序的主页。在这个页面中找到下载安装脚本链接,脚本名为ez_setup.py。把这个文件保存到电脑的一个临时文件夹中,然后在这个文件夹中执行以下命令:

    $ python ez_setup.py

    $ easy_install virtualenv

    (上述命令必须以具有管理员权限的用户身份执行,在微软Windows系统中,请使用“以管理员身份运行”选项打开命令行窗口,在基于Unix的系统中,要在上面两个命令前面加上sudo,或者以根用户身份执行)

    在当前项目所在文件夹中创建虚拟环境,一般虚拟环境会被命名为venv

    $ virtualenv venv

    现在,在项目文件夹中就有了一个venv的子文件夹,它保存一个全新的虚拟环境,其中有一个私有的Python解释器,在使用这个虚拟环境之前,你必须将它激活

    Linux和Mac OS X用户,激活命令如下:

    $ source venv/bin/activate

    微软Windows激活命令如下:

    $ venvScriptsactive

    退出虚拟环境:

    deactivate

    程序的基本结构:

    初始化:

    说明:所有Flask程序必须创建一个程序实例,把收到的客户端的请求转交给这个程序实例处理。

    Flask类的构造函数只有一个必须指定的参数,即__name__,那么这个__name__是什么意思呢?Flask的这个参数__name__决定程序的根目录,以便稍后能够找到相对于程序根目录的资源文件位置。

    关于动态请求地址:

    我们经常会遇到这种请求地址:http://www.baidu.com/<name>

    路由函数如下:

    那么下面这URL函数是什么意思呢?

    上面这个URL的意思为:路由中的动态部分默认使用字符串,把id转换成整数类型。

    启动服务器:

    __name__ =='__main__' 是python的惯用方法,在这里确保直接执行这个脚本时才启动开发Web服务器。如果这个脚本由其他脚本引入,程序假定父级脚本会启动不同的服务器,因此不会执行app.run(). 加debug=True简便理解:每当程序代码修改后,它会自动启动。

    程序和请求上下文:

    Flask从客户端收到请求时,要让视图函数能访问一些对象,这样才能处理请求。请求对象就是一个很好的例子,它封装了客户端发送的HTTP请求。

    Flask中使用请求上下文让视图函数可以访问请求中的对象,Flask使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他线程。

    在Flask中有两种上下文,程序上下文请求上下文:

    变量名                          上下文                               说明

    current_app                程序上下文                        当前激活程序的程序实例

    g                                 程序上下文                        处理请求时用作临时存储的对象,每次请求都会重设这个变量

    request                       请求上下文                        请求对象,封装了客户端发出的HTTP请求中的内容

    session                       请求上下文                        用户会话,用于存储请求之间需要“记住”的值的词典

    Flask在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。

    在这个例子中,没激活程序上下文之前就调用current_app.name会导致报错,但推送完上下文之后就可以调用了。注意,在程序实例上调用app.app_context()可获得一个程序上下文。

    请求钩子:

    请求钩子使用装饰器实现:

    before_first_request:注册一个函数,在处理第一个请求之前运行。

    before_request:注册一个函数,在每次请求之前运行。

    after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行

    teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。

    在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。例如,before_request处理程序可以从数据库中加载已登录用户,并将其保存到g.user中,随后调用视图函数时,视图函数再使用g.user获取用户。

    Flask web开发第八章总结:

    Flask-Login:管理已经登录用户的用户会话

    Werkzeug:计算密码散列值并进行核对

    itsdangerous:生成并核对加密安全令牌

    若想保证数据库中用户密码的安全,关键在于不能存储密码本身,而要存储密码的散列值。计算密码散列值的函数接收密码密码作为输入,使用一种或多种加密算法进行转换密码,最终得到一个和原始密码没有关系的字符序列,核对密码时,密码散列值可代替原密码,因为计算散列值的函数是可复现的:只要输入一样,结果就一样。

    Flask-Login认证用户:

    Flask-Login是个非常有用的小型扩展,专门用来管理用户认证系统中的认证状态,且不依赖特定的认证机制。

    使用Flask-Login扩展,必须实现几个方法:

    is_authenticated()                  如果用户已经登录,必须返回True,否则返回False

    is_active()                              如果允许用户登录,必须返回true,否则返回False

    is_anonymous()                     对普通用户必须返回False

    get_id()                                  必须返回用户的唯一标识符,使用Unicode编码字符串

  • 相关阅读:
    java基础:6.3 封装类、Number类、格式化输出、String
    java 快捷键记录
    java基础:6.2 Object、final、abstract、内部类
    如何解决.so 文件下载到mac 失败的问题
    mac 将.so文件上传到SVN上
    限制输入内容的需求
    Android Intent调用 Uri的使用几种格式
    onItemClick的参数
    Android常见的几种RuntimeException
    android:inputType参数类型说明
  • 原文地址:https://www.cnblogs.com/daqingzi/p/9669816.html
Copyright © 2020-2023  润新知