2018-11-09

flask框架视图基本结构:

1.接收来自浏览器的数据2.校验数据(判断数据是否存在,格式是否符合要求,所需数据是否齐全)3.业务处理,(存储数据,或删除数据,查询数据)4.返回数据(渲染模板,或返回json数据)

需要携带参数时:

大多用POST请求方式,后端request.json.get( ) 来获取参数.

GET请求方式,后端用request.args.get( ) 来获取参数

不需要参数时:

    大多用GET请求方式

ajax多用POST 请求方式

前端的处理逻辑:

ajax 多用于局部刷新的页面(异步加载数据,减轻服务器的压力)

$.ajax({

# 要请求的链接

url:"/passport/register",

# 请求方式

type:"post",

# 请求时要携带的数据

data:JSON.stringify(params),

# 指定请求头数据格式

contentType:"application/json",

# 请求成功后的回调函数,resp用来接收请求成功后的响应

success:function(resp) {

if(resp.errno=="0"){

// 刷新当前界面

location.reload()

}else{

$("#register-password-err").html(resp.errmsg)

$("#register-password-err").show()

           }

       }

   })

flask框架数据库配置

SQLAlchemy

Redis

CSRF 包含请求体的请求都需要开启CSRF,CSRFProtect只做验证工作

Session 利用 flask-session扩展,将 session 数据保存到 Redis 中

Flask-Script与数据库迁移扩展

导入数据库扩展,并在配置中填写相关配置

fromflask_sqlalchemyimportSQLAlchemy

importredis

fromflask_wtf.csrfimportCSRFProtect

fromflask_sessionimportSession

fromflask_scriptimportManager

fromflask_migrateimportMigrate,MigrateCommand

classConfig(object):

"""工程配置信息"""

DEBUG=True

#### 数据库的配置信息

SQLALCHEMY_DATABASE_URI="mysql://root:[email protected]:3306/information"

SQLALCHEMY_TRACK_MODIFICATIONS=False

#### redis配置

REDIS_HOST="127.0.0.1"

REDIS_PORT=6379

#### flask_session的配置信息

SECRET_KEY="EjpNVSNQTyGi1VvWECj9TvC+kq3oujee2kTfQUs8yCM6xX9Yjq52v54g+HVoknA"

SESSION_TYPE="redis"# 指定 session 保存到 redis 中

SESSION_USE_SIGNER=True# 让 cookie 中的 session_id 被加密签名处理

SESSION_REDIS=redis.StrictRedis(host=REDIS_HOST,port=REDIS_PORT)# 使用redis的实例

PERMANENT_SESSION_LIFETIME=86400# session 的有效期,单位是秒

app.config.from_object(Config)

db=SQLAlchemy(app)

CSRFProtect(app)

Session(app)

#### 命令行模式

manager=Manager(app)

#### 数据库迁移扩展

Migrate(app,db)

manager.add_command('db',MigrateCommand)

if__name__=="__main__":

manager.run( )

在Flask框架中,其自己对Python的logging进行了封装,在Flask应用程序中,可以以如下方式进行输出log日志:

current_app.logger.debug('debug')

current_app.logger.error('error')

生成 csrf_token 的值

#导入生成 csrf_token 值的函数

from flask_wtf.csrf import generate_csrf

# 调用函数生成 csrf_token

csrf_token = generate_csrf( )

将 csrf_token 的值传给前端浏览器    实现思路:可以在请求勾子函数中完成此逻辑

@app.after_request

defafter_request(response):

# 调用函数生成 csrf_token

csrf_token=generate_csrf()

# 通过 cookie 将值传给前端

response.set_cookie("csrf_token",csrf_token)

returnresponse

自定义过滤器

在 app 创建的函数里面注册过滤器

在 index.html 中使用自定义过滤器

自定义过滤器

def do_index_class(index):

   """自定义过滤器,过滤点击排序html的class"""

   if index == 0:

       return "first"

   elif index == 1:

       return "second"

   elif index == 2:

       return "third"

   else:

       return ""

在 app 创建的函数里面注册过滤器

from info.utils.common import do_index_class

# 添加自定义过滤器

app.add_template_filter(do_index_class, "index_class")

在 index.html 中使用自定义过滤器

   {% for news in data.click_news_list %}

  • {{ loop.index }}{{ news.title }}
  •    {% endfor %}

    前端数据请求

    1.-用JQuery的.get方法和.get方法和.post 方法发送请求

    (1)get请求

    $.get(url, param, function(data){

    //请求成功时调用回调函数

       alert(data);

    });

    (2)post请求

    $.post(url, param, function(data,status){

    alert("数据"+data+"\n状态"+status);

    },"json");

    //和get请求一样,只是在后面加上数据的格式,比如“json”

    2.- 用JQuery的$.ajax方法发送请求

    (1)get请求

    $.ajax({

        url: "url",

        datatype:"json",

        type:"GET",

        success:function(e){  //成功后回调

                 alert(e);

        },

        error:function(e){   //失败后回调

                 alert("失败");

        }

    });

    成功时的回调函数和失败时的回调函数;

    (2)post请求

    $.ajax({

        url: "url",                

        datatype:"json",

        type:"post",

        data:{info:123},

        success:function(e){  //成功后回调

                  alert(e);

        },

        error:function(e){   //失败后回调

                  alert(e);

        }          

    });

    表单异步提交

    ajaxSubmit(obj)方法是jQuery的一个插件jquery.form.js里面的方法,所以使用此方法需要先引入这个插件。如下所示:

    那么,如何通过ajaxSubmit(obj)提交数据呢?首先我们需要一个form,代码如下:

    标题:

    内容: