2020
Hi,虽然今天吃了一颗糖,其实也没啥庆祝的,一个后端的假的程序员,花了一下午弄的博客,简洁的很啊。
-开始前的准备
系统环境:在Windows上测试的,Django版本是1.6,python 2.7.13
|
|
1.创建工程
|
|
工程文件夹下三个重要的文件
manage.py —– Django项目里面的工具,通过它可以调用django shell和数据库等。
settings.py —- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py —– 负责把URL模式映射到应用程序。(后两个文件在工程文件夹的同名文件夹内)
2.运行服务
在工程文件夹下,也就是manage.py所在文件夹。
|
|
然后打开浏览器,访问http://127.0.0.1:8000即可看到运行状态。
3.创建blog应用
|
|
在工程文件夹下会生成blog文件夹,里面生成:
|
|
4.编辑blog文件夹下的models.py
|
|
5.创建数据库
python中自带SQLite数据库,所以无需修改
如果使用Mysql数据库需要修改工程文件夹下同名文件夹的settings.py
|
|
然后执行创建命令:
|
|
创建过程中会出现选择:输入yes,然后是超级用户名,邮箱,密码(自定义,不是邮箱密码)用于登录管理系统。
6.添加blog应用到settings.py
|
|
修改跟settings.py同文件夹的urls.py
原文件:
|
|
修改成:
|
|
7.将创建数据添加到后台
编辑blog文件夹下的models.py
|
|
再次初始化数据库
|
|
然后随意创建post,后面会用于显示。
8.创建模板
在blog文件夹下新建一个templates文件夹,然后在该文件夹下新建一个archive.html文件
|
|
然后设置模板路径,修改settings.py
在最后面添加
|
|
在blog文件夹下的views.py中创建试图函数
|
|
posts = BlogPost.objects.all() :获取数据库里面所拥有BlogPost对象
t = loader.get_template(“archive.html”):加载模板
c = Context({‘posts’:posts}):模板的渲染的数据是有一个字典类的对象Context提供,这里的是一对键值对。
9.创建blog的url模式
原文件:
|
|
修改后:
|
|
10.blog的urls
在blog文件夹下新建一个urls.py
|
|
最后可以选择给博客添加样式
在blog/templates/创建一个html文件,然后让archive.html引用就完成了。
|
|
然后找一个美化的样式写到united.html中就行了。
Python爬虫遇到的多线程的坑
先谈谈我的认识
-
其实还没弄懂并发和并行,然后依照自己的想法去做,别人是用多线程下载网页的,我爬的是网易云音乐的评论数,而用到多线程去解析,做了三个脚本:
-
第一个是只用threading的方法和类去弄。
-
第二个是比第一个多了Queue模块。
-
第三个想法行不通(看到别人提到可以用map函数提高效率,但结果是脚本没有运行成功,一直卡着)。
-
虽然想到要用多进程去弄,但还没看明白,所以算了。
讲给未来的自己吧
-
多线程的知识:
-
线程模块
- Python通过两个标准库thread和threading提供对线程的支持。thread提供了低级别的、原始的线程以及一个简单的锁。
- thread 模块提供的其他方法:
- threading.currentThread(): 返回当前的线程变量。
- threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
- threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
- 除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:
- run(): 用以表示线程活动的方法。
- start(): 启动线程活动。
- join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
- isAlive(): 返回线程是否活动的。
- getName(): 返回线程名。
- setName(): 设置线程名。
重要的代码块
一个最基本的线程运用:
|
|
但是上面没有Queue模块,Queue模块是提供队列操作的模块,对于多线程而言,访问共享变量时,队列queue是线程安全的。So 来一个!
|
|
多线程只适用与IO密集型任务,还有讲到并发和并行:
-
并发性(concurrency),又称共行性,是指能处理多个同时性活动的能力,并发事件之间不一定要同一时刻发生。
-
并行性(parallelism)是指同时发生的两个并发事件,具有并发的含义,而并发则不一定并行。
##还有就这样吧
float图来了,18号想弄的,非得拖到今天。
先前想到用svg格式嵌入的,但写在markdown里面没法弄,以后多找找些js工具来弄图表,
虽然博客是静态的,但只写字太单调了,加点东西装饰,先弄第一个吧
按钮没弄是因为css没学,现学现卖也没那能力。暂且就这样吧。
1 照例安装:先安装virtualenv, 再安装Django
|
|
2 建立项目(或工程):
|
|
3 创建app(相当与网站的内容页)
建立工程后用浏览器打开127.0.0.1:8000,就可以看到服务启动成功的页面。接下来建立一个 web app
|
|
在创建工程和应用之后未作任何改动时,文件目录结构如下:
|
|
4 修改app(丰富应用,添加各种功能)
写一个简单的music主页面
编辑views.py, 清空文件内容,并编写如下代码:
|
|
要调用views,我们需要将其映射到URL, 在music文件夹下新建urls.py, 添加如下代码:
|
|
编辑website/website/urls.py, 文件内初始一个urlpattern列表,用来链接用户指定的apps或新建一个链接
include()
函数允许引用其他URLconfs。 请注意,include()
函数的正则表达式不具有$
(字符串匹配字符),而是尾部斜线。 每当Django遇到include()
时,它将删除与此相匹配的URL的任何部分,并将剩余的字符串发送到包含的URLconf进行进一步处理。(translate from python.usyiyi.cn)
|
|
在INSTALLED_APPS列表中添加新建的music应用(每次添加一个app记得加上逗号):
|
|
设置数据库(本例就用简单的sqlite3)
|
|
##为应用添加任何内容
编辑models.py 新建两个类,内容来自(thenewboston on youtube):
|
|
register应用内容:
|
|
在website目录下执行如下指令
|
|
因为在models.py中只是定义类而已,并没有创建实例和添加内容,而添加内容是很简单的所以不多以详解首先要在virtualenv环境下(因为我安装的django是在隔离环境,所以编写django都要开启virtualenv)在website目录下运行,
|
|
现在打开http://127.0.0.1:8000/music/ 还是显示 a string content.一段文字,要添加什么内容就写在models.py里面,要引用页面html之类的就写在views.py里面
重构music页面,添加404页面
重新编写views.py,代码如下:
|
|
编写两个函数,index函数用于music页面内容, detail函数用于http://127.0.0.1:8000/music/album_id/ (album_id是数字,用每张专辑album的id作分页)分页内容,虽然现在写好了,但是还是无法打开music页面,因为没有编写页面的html。
使用templates模板
在music文件夹下创建一个新的文件夹templates,然后在里面再建一个music(注意是music)文件夹,然后在 templates/music 下建一个index.html文件,并编写如下代码:
|
|
再建一个detail.html:
|
|
重写view.py
让view更简单
|
|
更改urls.py
|
|
修改index.html
|
|
5 创建管理用户
|
|
6 网页前端样式模板
在music文件夹下新建一个static文件夹,然后在static下再建一个music文件夹,然后在music文件夹下新建一个style.css文件,样式随意,但是在index.html中要引用style.css的话,要在index.html加个语句
|
|
在考虑到每个网页用到相同样式的风格,所以将样式或js内容写在一个base.html里面(在music/templates/music文件夹下新建一个base.html),然后在用index.html扩展
|
|
即index.html中的内容如下(例子):
|
|
1 ag 代码搜索工具
|
|
编辑器集成 vim 您可以通过将以下行添加到~/.vimrc
:[ack.vim][]来使用Ag
|
|
2 autojump 一个更快的方式来导航你的文件系统
|
|
oh-my-zsh配置,编辑~/.zshrc
,然后source ~/.zshrc 命令使配置文件生效
|
|
3 axel 多线程下载工具,下载文件时可以替代curl、wget
|
|
4 bpkg 一个bash包管理器
|
|
源码安装
|
|
5 cloc 计算代码行数
|
|
6 figlet 不寻常的创建大字符的程序
|
|
7 fzf 一个通用的命令行模糊查找器
使用git
|
|
vim 插件集成
|
|
8 screenfetch Bash截图信息工具
|
|
9 thefuck 纠正您的以前的控制台命令
通过pip安装
|
|
10 mycli MySQL的命令行客户端,可以执行自动完成和语法高亮显示
|
|
11 htop 提供更美观、更方便的进程监控工具
|
|
12 lolcat 在 Linux 终端中为文本添加彩虹般的色彩
|
|
13 cowsay 可配置的正在思考或说话的奶牛
|
|
14 tldr 简化和社区驱动的手册页的集合
|
|
15 pm2 PM2是具有内置负载平衡器的Node.js应用程序的生产过程管理器
|
|
16 ls++ 上色版ls
|
|
17 scrot 屏幕截图
|
|
18 font manager 字体管理器(带界面)
|
|
19 trash cli 将文件和文件夹移动到垃圾箱
|
|
20 alder 递归目录列表程序,支持文件大小报告和模式匹配
|
|
21 bd-zsh 快速进入父目录
这里写的是,安装zsh插件(不单独安装)
|
|
22 tmux 多终端复用
|
|
#开发一个简单的Toast应用
##1 下载 Android Studio 并安装
|
|
一路确认安装后,打开 Android Studio
新建项目, 到选择Activity
布局时,选择空白布局。
完成选择后等待下载gradle
, 进入工程界面后,在activity_main.xml
的设计那里选择主题才会出现布局效果。
2 编写一个Toast 应用
###1添加按钮
在布局界面(activity_main.xml)Design, 拖动一个按钮到主界面上,点击上方的魔棒按钮(Infer Constraints)。
2 编写按钮事件
找到工程的MainActivity.java
写一个按钮实例,然后再写一个按钮事件,按钮事件监听单击显示Toast。代码如下:
|
|