投稿    登录
  博主录制的Python3爬虫视频教程已发布!详情请戳Python3爬虫视频教程!希望大家支持!非常感谢!

【Python搞搞轻量博客】必要的知识

Python 仙宇 551浏览 3评论

大家好,我又回来啦!

今天准备下数据库的,但是我想了想,那玩意讲的东西太多,怕大家一下接受不了,所以数据库那玩意我需要分几篇写,毕竟是重点嘛。

So ~ 我来说说今天我要讲的东西:

  • 更多的修改配置方法
  • request
  • session 讲解
  • 自定义错误页面
  • 静态文件管理

推荐

jinja2中文文档

推荐几部书和电影。

电影:

  • 《阿甘正传》
  • 《肖生克的救赎》
  • 《这个杀手不太冷》
  • 《教父》
  • 《辛德勒的名单》
  • 《霸王别姬》
  • 《美丽人生》
  • 《V字仇杀队》

书籍:

  • 《三体》
  • 《消费者行为学》
  • 《未来简史》
  • 《浪潮之巅》
  • 《腾讯传》
  • 《数学之美》
  • 《只是为了好玩》 Linus的半生自传
  • 《黑客与画家》
  • 《失控》 必读!

好书好电影很多啦。对了,还有一部美剧《硅谷》都很好。

不管是看书还是看电影,都不要被艳丽的封面和宣传片骗了!

配置方法

第一种:

如果设置的东西很少的话,就直接硬编码进来。

比如这样:

其中app.configflask.config.Config的一个实例,继承了Python的dict类型。

 

第二种:

既然app.config是一个dict。那么我们就能这么写:

 

第三种:(通常就用这种)

通过对象引入配置.

 

我们在主应用目录下创建一个了 config.py 文件然后在里面写一个类,类名叫啥都可以,创建之后,写了一个DEBUG = True

blog.py 下的第四行: 使用 app.config.from_object引入了类。

 

第四种:

使用文件导入

 

可以看到,也可以这样引入。

 

更多:

有非常多的配置引入方法。

比如也可以用 json ,可以用 configparser  来写配置…等等…一大坨啦。以上是推荐的几种方式。

 

请求上下文之 request:  封装了客户端发出的HTTP请求中的内容

第一行: 首先我们引入request

 

request 的方法很多。

我们来演示几个。

request.url 

当我们访问视图函数时,会返回我们一个 当前的 url

request.method

之前我们用过,返回 客户端用的什么方法访问的,通常是GET或者是POST

request.host

返回主机(或是域名)

request.file

当你使用表单上传文件的时候,需要用到它。

使用它和使用request.form 和 request.args 一样,使用 get 去获取

request.headers

返回一个 http 头 的 dict类型

可以使用 request.hreaders.get(‘Host’) 等来获取数据

 

request.environ

返回一个列表,列表是 HTTP头的详情和 WSGI的详情,可用 request.environ.get()  来获取数据

这是 environ 的所有元素。

 

request.remote_addr

返回客户端地址

request.user_agent

返回客户端的 User_Agent

 

还有一些,列个表:

  • form:  获取html表单提交的POST数据
  • args: 获取GET数据
  • values: 是form和args的结合,既包括表单数据,也包括args数据
  • json: 如果客户端提交的是json数据,则用本方法去解析
  • is_xhr: 返回True或是False。用于判断客户端是否是通过JavaScrpt的XMLHttpRequest提交的,其实就是Ajax提交。

请求上下文之一  Session: 存储用户回话

在web中,会话是一种服务器客户端保持连通状态的方法。在Flask中,这种方法通过Cookie实现。

举例说明:

比如一个web站定有一个注册功能,注册的时候有一个验证码。每次刷新验证码就会变。

如果验证码有一个变量,如果你正在注册(输入验证码),但是这个时候,别人访问了一次,这个验证码变量就变了。你输入好以后,点击确定,但是这时候的验证码已经是新验证码了,你输入的是之前的验证码。

这个问题怎么解决呢?

这个时候就是session出场了,session会对每一个客户端有独立的变量(形象举例),然后这个时候别人输入验证码就不会影响你的验证码了。

session就是针对每一个客户端有专门的session。

这就像局部变量,在每一个函数里面有相同名字的变量,但是互相不影响,除非是全局变量才会影响。

这里的session和操作字典是没什么区别的。

默认情况下,用户回话保存在客户端的cookie中,使用设置的 SECRET_KEY 进行加密签名,如果篡改了cookie的内容,签名就会失效,回话也会消失。

常见的场景:

如一些登录页面,点击登录后,会有一个记住登录,或是浏览器弹出的记住密码等。

说了一堆,我们来试试怎么用。

blog.py 中:

第八行: 使用session的话 SECRET_KEY 这项配置必须给True给session配置一个秘钥,使用 os.uranger()  进行生成,官方推荐的

这样看的话,感觉session没起到啥效果,但是!

我们用两个浏览器测试!

可以看到, session针对不同的客户端,会分配一个不同的回话。

如果你使用一个变量,而不是 session ,就完成不了这样的效果。

自定义错误

第10行: 利用装饰器来捕获404错误,当发生404时候,就会触发这个 error_404 这个视图函数,其中 errorhandler 中的参数 404是状态码

第12行: 可以看到,return两个值,一个是页面,一个是状态码。如果不给第二个值(状态码)的话,就会只返回页面,不会返回状态码,就像这样。

所以,我们要在 return 后带上状态码,就像这样。

当然,你也可以捕获其他页面错误,比如403之类的

静态文件

每个页面如果没有js和css,有时候显的会很Low,而且很多功能是需要js的。那么,我们如何去用这些资源呢?

难道我们要写到html里面吗?那请问我们有上万行css,你也要写到html里面吗?所以我们要去引用css或者js再或者是图片等等。

通常,像图片,css,视频,js等等这些文件,通常为 “静态文件”

在Flask中,有专门去存放这类文件的,在项目目录下去新建一个名为 static 的文件夹.

然后我们在 static 下新建一个名为 message.txt 文本。

然后用浏览器去访问这个静态资源

你只能去 /static/下获取。

当然,你可以指定哪个是静态文件夹,app = Flask(__name__,static_folder="你指定的文件夹")

我们来看下Flask方法的源码

如果我们在模板中去用静态文件呢?难道我们要去一个一个去写完整路径吗?

答案是:不用!

大家还记得 url_for() 函数吗?

没错,我们可以使用 url_for() 去写完整路径。

比如我现在有一个名为 bootstrap.min.css 的文件在 static 目录下的 css 文件下。

我们来获取这个完整路径

url_for('static',filename="css/bootstrap.min.css")

在html模板中,用 link 标签来引入的话可以这样写。

有问题的小伙伴可以来咨询!

微信二维码

转载请注明:静觅 » 【Python搞搞轻量博客】必要的知识

喜欢 (13)or分享 (0)

我的个人微信公众号,联系我请直接在公众号留言即可~

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

想结交更多的朋友吗?

来进击的Coder瞧瞧吧

进击的Coder

QQ群号 99350970 立即加入

进击的Coder灌水太多?

这里是纯粹的技术领地

激进的Coder

QQ群号 627725766 立即加入

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击下面的

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 不错
    fuyh@163.com2018-04-20 00:43 (3天前)回复
  2. 写的不错, :mrgreen:
    至尊宝2018-04-19 12:45 (4天前)回复
  3. 2018-04-17 14:22 (6天前)回复