投稿    登录
  《Python3网络爬虫开发实战》赠书活动正在进行中!详情请戳赠书活动!欢迎参与!非常感谢!

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

Python 仙宇 5150浏览 14评论

大家好,我又回来啦!

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

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搞搞轻量博客】必要的知识

喜欢 (34)or分享 (0)

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

扫码或搜索:进击的Coder

进击的Coder

微信公众号 扫一扫关注

想结交更多的朋友吗?

来进击的Coder瞧瞧吧

进击的Coder

QQ群号 99350970 立即加入

进击的Coder灌水太多?

这里是纯粹的技术领地

激进的Coder

QQ群号 627725766 立即加入

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

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

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(14)个小伙伴在吐槽
  1. you're really a good webmaster. The site loading velocity is amazing. It sort of feels that you're doing any unique trick. In addition, The contents are masterwork. you have performed a excellent activity in this matter!
    Sling TV2018-11-15 14:46 (3天前)回复
  2. I really like it when people get together and share ideas. Great blog, stick with it!
    Sling TV2018-11-14 19:45 (4天前)回复
  3. Hello there! I know this is kinda off topic but I was wondering if you knew where I could find a captcha plugin for my comment form? I'm using the same blog platform as yours and I'm having problems finding one? Thanks a lot!
  4. We came across a cool website which you might appreciate. Take a search for those who want.
    Google2018-11-11 23:12 (6天前)回复
  5. WOW just what I was looking for. Came here by searching for Quest Bars Cheap
    Quest Bars Cheap2018-11-09 09:27 回复
  6. Hmm is anyone else experiencing problems with the images on this blog loading? I'm trying to determine if its a problem on my end or if it's the blog. Any feed-back would be greatly appreciated.
    Quest Bars Cheap2018-11-07 09:33 回复
  7. Hi there, just wanted to say, I loved this article. It was practical. Keep on posting!
    Quest Protein Bars2018-11-06 21:19 回复
  8. Quest bars cheap fitnesstipsnew1 quest bars cheap 516999410492780544 quest bars cheap Thanks for the auspicious writeup. It actually was a amusement account it. Glance complicated to far added agreeable from you! By the way, how could we be in contact? Quest bars cheap fitnesstipsnew1 quest bars cheap 516999410492780544 quest bars cheap
    quest bars cheap2018-11-05 07:47 回复
  9. Hi there, its nice article about media print, we all be familiar with media is a great source of facts.
    descargar facebook2018-11-02 18:12 回复
  10. It's really a cool and useful piece of info. I'm satisfied that you just shared this useful info with us. Please keep us up to date like this. Thanks for sharing.
  11. Excellent website. A lot of useful info here. I'm sending it to several buddies ans also sharing in delicious. And naturally, thanks in your effort!
  12. Pretty! This has been a really wonderful post. Thank you for supplying these details.
  13. Python新手群【828125608】群内有安装包和学习视频资料,零基础,进阶,实战免费的在线直播免费课程,希望可以帮助你快速了解Python,欢迎加入群获取永久免费听课权限
    Python工程师2018-10-27 12:52 回复
  14. Asking questions are really pleasant thing if you are not understanding something totally, but this post provides pleasant understanding yet.
    Coconut Oil2018-10-26 03:29 回复