那些在Web Flask踩过的坑。

按章节顺序来吧 = -  =

第二章:

通过app.app_context()激活程序上下文才可以获得g, currrent_app,request,session等……

路由映射保存于app.url_map中,阔以直接开shell查看。

第三章:

url_for(),接收端点名(app.url_map中的字符串端点名),生成链接,_external参数控制绝对地址或相对地址。

第四章:

默认情况下,Flask-WTF能保护所有表单免受跨站请求伪造(Cross-Site Request Forgery,CSRF)的攻击。为了实现CSRF保护,Flask-WTF需要程序设置一个密匙。Flask-WTF使用这个密匙生成加密令牌,再用令牌验证请求中表单数据的真伪。设置密匙的方法app.config['SECRET_KEY'] = ‘you'll never guess'。app.config对象提供了一些方法,可以从文件或环境中导入配置值(看了这么多遍都没有认识到这点……第7章原来就是用app.config对象的方法导入配置的T T),密匙在环境中导入会更安全?

重定向后POST请求数据丢失,所以程序需要保存相关数据,所以可以将数据储存在用户会话session中,在请求之间“记住”数据。“默认情况下,session保存在客户端cookie中,使用SECRET_KEY(进行序列化的加密?)进行加密签名,如果修改了cookie中的内容,签名失效,session失效。

url_for()函数的必须指定参数是端点名,即路由的内部名字。默认情况下是相应师徒函数的名字(不默认情况下呢? =-= !)

第五章:

在Flask-SQLAlchemy中,数据库由URL指定。流行的数据库引擎URL格式如下:

MySQL                                                      mysql://username:password@hostname/database

Postgres                                                   postgresql://username:password@hostname/database

SQLite(Unix)                                             sqlite:///absolute/path/to/database

SQLite(Windows)                                     sqlite:///c:absolute/path/to/database

按照如上格式配置,不出意外,应该除了SQLite其他应该会配置失败吧= 。=反正劳资配置mysql失败了。其实格式也没有问题,底层原理不清楚,猜测应该还是接口问题。mysql配置(ubuntu的话需要安装一些Pymysql,python mysqldb,什么乱七八糟的东西我都下了,当然还是未能按如上格式配置成功,因为还有一个叫flask-mysql的东西!!!!搞得我都不知道哪个起作用了...总的来说就是flask-mysql最重要....不装不能按如上的mysql格式配置,不过听说有mysql+mysqldb://username:password@hostname/database可以成功的,强迫症表示不试,一定要按原格式来!!也就装了大半天嘛……= - =

记个例子:

class Role(db.Model):

     user = db.relationship('User', backref='role)

class User(db.Model):

     role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

User作为主表被添加了一个外键role.id, 此列接收了两个参数(db.Integer(声明列类型)和 db模块的外键ForeignKey类,接受关联表的主键roles.id做参数值)

Role模型直接就定义了一个user,此属性给出与role相关联的user名单……,relationship函数接收主表的类名User,并backref反击了一个role名单的属性给User???

Role.query_filter_by(name='user')返回一个query查询对象,不是model对象,所以不能使用models的方法,Role.query_filter_by(name='user').first()返回的才是model对象=  =。

flask-migrate拓展,很有用,总结用法下来就是,没有初始化迁移仓库的情况(app根目录下无migrations)下,创建一个migrations文件夹(python app.py db init)。有migrations之后models(表模型)有更改的话,python app.py db migrate 会创建一个更新的脚本文件,有了更新的脚本文件之后,执行python app.py db upgrade就等于使用migrate生成的更新脚本了。简述:(生成安装包:migrations——>创建更新文件 migrate——>更新 upgrade)

第六章:

呵呵。

通过flask-mail拓展发送邮件。使用的端口为:25,使用的是smtp.qq.com(需要到qq邮箱中开启相关服务,需要声明的是,开启服务后用拓展发邮箱变成——> qq账号 + 授权码。 ————授权码在开服务后会给出,忘记了可以申请重新给出。

为了保护账号信息,让脚本从环境中导入敏感信息(os.environ.get('敏感信息’))比较好。

ubuntu下为 sudo vim /etc/profile ,然后将需要导入的变量以: export mail_username=我的qq账号 export mail_password=我的qq授权码, 然后 source /etc/profile即可。需要声明的是以上表达式需要严格遵守,不要发生 export mail_username = 我的qq账号,等号左右有空格的良好编程习惯,不然你会导入了一个寂寞。

第七章:

config中的init_app方法不知道咋整的,直接就调用完成初始化了……

这个app.config对象也是很给劲,直接app.config.from_object(config[config_name])就导入配置了。

app程序包中的构造文件建立一个create_app工厂函数,封印了需要初始化拓展的过程。

各程序包子包构造文件中创建了一个蓝图用来修饰路由,将蓝图注册到create_app工厂函数中可以将蓝图关联到app。a

第八章:

将werkzeug.security提供的生成散列值与验证的函数写入模型类方法中。

@property装饰password将其设置为只写属性,@property.setter装饰函数确保将写入的password直接转换为password_hash。

更新模型属性,属性大概都是登陆表单所需的吧……

登陆视图功能:1.生成表单,2.验证表单数据(符合验证函数与否),3.根据表单数据获得数据库模型,4.判断模型是否存在and验证密码,5.登入用户——>redirect(request.args.get('next') or url_for('main.index').5.分支 错误用户名 or 密码

注册表单:1.生成带验证函数与符合正则表达式的表单。2.定义了两个validate_开头的方法验证时候有已存在的email和username,会和常规的验证函数一起被调用。

注册视图:1.生成注册表单,2.验证输入(此时就验证了email与username的合法还有重复与否所以下一步可以直接生成模型),3.根据表单提交数据生成user模型,4.db.session.add(user)然后flash状态变化最后重定向。

用户验证:给User模型定义生成与验证token的方法:将app.config['SECERT_KEY']条件填入itsdangerous模快TimedJSONWebSignatureSerializer类生成类实例,调用实例方法dumps({'confirm':self.id})字典序列之后的乱七八糟的长token。

有了生成token的方法之后,在根据注册表单数据生成user模型后就调用模型已定义的generate_confirmation_token方法生成token写入邮件中。一个confirm/<乱七八糟的序列>的链接就包含在发送的邮件中了,点击该链接就会触发匹配路由confirm/<token>映射的视图函数,视图函数判断current_user的confirmed值,验证token是否与自身id一致等。

request.endpoint什么鬼

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容