美文网首页
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