美文网首页
2018-11-09

2018-11-09

作者: 开心豆豆豆 | 来源:发表于2018-11-09 19:15 被阅读0次

    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:mysql@127.0.0.1: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 中使用自定义过滤器

    <ulclass="rank_list">

       {% for news in data.click_news_list %}

    <li><spanclass="{{ loop.index0 | indexClass }}">{{ loop.index }}</span><ahref="#">{{ news.title }}</a></li>

       {% endfor %}

    </ul>

    前端数据请求

    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里面的方法,所以使用此方法需要先引入这个插件。如下所示:

    <scriptsrc="http://code.jquery.com/jquery-1.11.0.min.js"></script>

    <scriptsrc="http://malsup.github.io/jquery.form.js"></script>

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

    <form,action=“”>

    标题:<inputtype="text"name="title"/><br/>

    内容:<textareaname="content"><textarea/><br/>

    <button>提交</button>

    </form>

    上面是一个需要提交内容的form,通常情况下,我们直接通过form提交的话, 提交后当前页面跳转到form的action所指向的页面。然而,很多时候我们并不希望提交表单后页面跳转,那么,我们就可以使用ajaxSubmit(obj)来提交数据。使用方法如下所示:

    $('button').on('click', function() {

       $('form').on('submit', function() {

           var title = $('inpur[name=title]').val();

           var content = $('textarea').val();

           $(this).ajaxSubmit({

               type: 'post', // 提交方式 get/post

               url: 'your url', // 需要提交的 url

               data: {

                   'title': title,

                   'content': content

               },

               success: function(data) { // data 保存提交后返回的数据,一般为 json 数据

                   // 此处可对 data 作相关处理

                   alert('提交成功!');

               }

               $(this).resetForm(); // 提交后重置表单

           });

           return false; // 阻止表单自动提交事件

       });

    });

    网页分页

    (网页下端的点击翻页按钮)

            page指的是当前页

            per_page指的是总页数

    paginate = News.query.filter(*filters).order_by(News.create_time.desc()).paginate(page, per_page, False)

    # 获取当前页查询出来的数据

    items = paginate.items

    # 获取到总页数

    total_page = paginate.pages

    # 获取到当前页

    current_page = paginate.page

    退出登录的实现

    退出登录的实现就是通过删除数据库中的session来实现的当退出登录时,一定要清除session数据(pop),尤其是管理员退出登录时一定要清除session数据,否者普 通用户登录时会携带管理员的session数据,这样普通用户就会具备管理员权限

    with app.app_context( )  手动开启上下文

    相关文章

      网友评论

          本文标题:2018-11-09

          本文链接:https://www.haomeiwen.com/subject/bmaoxqtx.html