Django1.9开发博客05- 页面美化
css是一种用来描述某种标记语言写的web站点的样式语言。这里我们并不想展开讨论, 关于CSS我在这里推荐一个很不错的资源: Codeacademy HTML & CSS course
不想从头开始写,因为我们有现成的css框架,没必要重复造轮子。
css是一种用来描述某种标记语言写的web站点的样式语言。这里我们并不想展开讨论, 关于CSS我在这里推荐一个很不错的资源: Codeacademy HTML & CSS course
不想从头开始写,因为我们有现成的css框架,没必要重复造轮子。
到目前为止,你的网站只能在你自己的电脑上访问到。你需要将它发布到公网上去让地球上的人都能看到,那么要怎么做呢?
在互联网上你可以找到很多的服务器供应商。我们将使用一个相对简单的托管平台PythonAnywhere。 PythonAnywhere对于一些没有太多访问者的小应用是免费的,所以它对你来说绝对是足够使用的。
其它我们将使用到的外部服务是GitHub,它是一个代码托管服务。还有其它的一些服务,但当今几乎所有的程序员都有 GitHub 帐户,相信你肯定有一个!
django的模型就是用于在数据库中存储的某种类型的对象。在我们的博客系统中, 发表的文章就是一个模型,需要存储在数据库中。 这里我们使用django默认的sqlite3库,对于我们的这个小系统而言已经足够了。
笔者用过django一段时间了,是时候做点笔记了。不过官网文档稍微有点复杂,对新手而言很困难, 而网上的一些教程很多都过时了。最近看到一个外文的教程非常不错,网址是:http://tutorial.simpleblog.org/, 这个是基于django1.9和python3.4,通俗易懂,非常适合新手入门。 那么我自己参考这个整理了一下这个教程,同时还将源码上传到GitHub上去了。希望对于大家有帮助。教程中如果有不足之处希望大家不吝赐教 ^_^
参考教程:http://tutorial.simpleblog.org/
GitHub项目地址:https://github.com/yidao620c/simpleblog
演示地址:https://yidao620.pythonanywhere.com/
非常期待有人合作一起完成正式版1.0。目前有74个人fork,但暂时还木有收到任何的pull requests。→_→
redis中的事务transaction是一组命令集合,要么都执行,要么都不执行。
1 | # MULTI |
redis将客户端发送的事务执行链放入一个队列queue中,然后接受到EXEC请求后才顺序执行这个命令串,同时保证执行这些的时候不被其他命令打扰。
错误处理:
redis木有rollback机制,这个要靠自己去处理出错情况。
strings类型及操作
string是最简单的类型,你可以理解成与Memcached是一模一样的类型,一个key对应一个value, 其上支持的操作与Memcached的操作类似。但它的功能更丰富。
string类型是二进制安全的。意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。 从内部实现来看其实string可以看作byte数组,最大上限是1G字节,下面是string类型的定义:
1 | struct sdshdr { |
len是buf数组的长度。
更新于2017/08/02,使用最新版 redis 4.0.1 演示
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库, 并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。
和普通的Key-Value结构不同,Redis的Key支持灵活的数据结构,除了strings,还有hashes、lists、 sets 和sorted sets等结构。 正是这些灵活的数据结构,丰富了Redis的应用场景,能满足更多业务上的灵活存储需求。
Redis的数据都保存在内存中,读写效率很高。为了实现数据的持久化,Redis支持定期刷新(可通过配置实现)或写日志的方式来保存数据到磁盘。
Buffer由数据和可以高效访问以及操纵这些数据的四个索引组成,这四个索引是:mark、position、limit、capacity。 下表是用于设置和复位索引以及查询它们的方法:
方法 | 说明 |
---|---|
capacity() | 返回缓存区容量 |
clear() | 清空缓存区,position=0,limit=capacity,此方法可覆写缓存区 |
flip() | limit=position,position=0,用于准备从缓存区读取已经写入的数据 |
limit() | 返回limit的值 |
limit(int lim) | 设置limit的值 |
mark() | 将mark设置为position |
position() | 返回position的值 |
position(int pos) | 设置position的值 |
remaining() | 返回(limit - position) |
hasRemaining() | 若有介于position和limit之间的元素,返回true |
reset() | 将position设置为mark |
rewind() | 将position设置为0,也就是缓存区的开始位置 |
在缓存区中插入和提取数据的方法会更新这些索引,用于反映所发生的变化。
最近学习内部类的时候,对Java实现回调函数机制有了进一步了解,自己整理点比较,希望大家可以相互讨论。 所谓回调,就是允许客户类通过内部类引用来调用其外部类的方法,这是一种非常灵活的功能。
由于java暂时还不能显示支持闭包(Closure),不过听说新版可以支持了,不过我还没用过。现在暂时用的是非静态内部类实现回调功能。