五、开发后台管理(一)
第四节中迁移了数据库并且创建了后台管理员,登录后台发现三个应用还没有注册进入后台,这一节记录了后台开发,到后面我们会使用xadmin来替换比较简陋的admin后台
先编辑blog/admin.py
进入后台,我们先新增一篇文章,可以看到标签和分类是object,这里需要在models.py中增加定制类
|
|
config和comment应用也是这样开发后台,具体代码可以去github查看
Changing & Building
第四节中迁移了数据库并且创建了后台管理员,登录后台发现三个应用还没有注册进入后台,这一节记录了后台开发,到后面我们会使用xadmin来替换比较简陋的admin后台
先编辑blog/admin.py
进入后台,我们先新增一篇文章,可以看到标签和分类是object,这里需要在models.py中增加定制类
|
|
config和comment应用也是这样开发后台,具体代码可以去github查看
前面三个应用的模型都创建好了,现在需要把它们迁移至数据库
python manage.py makmigrations
|
|
python manage.py migrate
|
|
数据库迁移完毕后,每个应用的migrations文件内会出现一个0000_initial.py文件,它记录了对象模型的更改。在后面的开发过程中,如果改动了模型,就应该再一次迁移数据库。这里数据库开发阶段还是使用sqllite,后面进入生产环境中时,我们再配置MySQL
接下来创建后台管理帐户
python manage.py createsuperuser
运行服务进入后台试一下,http://127.0.0.1:8000/admin/
python manage.py runserver
blog
author、category都有外键(foreignkey一对多关系),每篇文章只有一个分类,而一个分类下可以有多篇文章
tag的ManyToManyField字段是多对多关系,一篇文章可以有多个标签,一个标签下也可以有多篇文章
|
|
config
comment
这里创建3个app
python manage.py startapp blog
python manage.py startapp config
python manage.py startapp comment
这样就创建好了三个应用,接下来我们需要在setting.py中安装应用
结构类型
STRING
redis的自增和自减命令
redis处理子串和二进制位的命令
打开redis-cli
设置键hello的值为world
set hello world
获取键hello的值
get hello
将键存储的值+1
import redis
conn = redis.Redis()
conn.get(‘key’)
conn.incr(‘key’)
1
conn.incr(‘key’, 15)
16
将键存储的值减去5
conn.decr(‘key’, 5)
11
先设置一个键,key=13,然后再incr自增
conn.set(‘key’, ‘13’)
True
conn.incr(‘key’)
14
将value追加到给出的键当前存储的值的末尾
conn.append(‘new-string-key’, ‘hello’)
5
conn.append(‘new-string-key’, ‘world’)
10
getrange获取从2开始到6结束范围内的所有子串
conn.getrange(‘new-string-key’, 2, 6)
b’llowo’
setrange 范围设置操作,在start索引位置替换字符串中已有的内容
conn.setrange(‘new-string-key’, 0, ‘H’)
conn.setrange(‘new-string-key’, 6, ‘W’)
10
增长字符串长度
conn.setrange(‘new-string-key’, 11, ‘, how are you?’)
25
setbit
setbit key-name offset value
conn.setbit(‘another-key’, 2, 1)
0
conn.setbit(‘another-key’, 7, 1)
0
conn.get(‘another-key’)
b’!’
LIST
阻塞式的列表弹出命令以及在列表之间移动元素的命令
将键为list_key的值推入列表的右端
rpush list_key treehl
获取指定范围内的值
lrange list_key 0 -1
从列表中获取单个元素
lindex list_key 1
从列表中删除元素
lpop list_key
只保留起始索引到结束索引之间的元素
conn.lrange(‘list-key’, 0, -1)
[b’a’, b’b’, b’c’]
将一个元素从一个列表移动到另一个列表,并返回被移动的元素
conn.brpoplpush(‘list2’, ‘list’, 1)
b’item6’
SET
用于组合和处理多个集合的Redis命令
将键set-key值为item,item2……添加到集合
sadd set-key item
sadd set-key item2
sadd set-key item3
添加同样的值会添加不进去
sadd set-key item2
(integer) 0
返回集合包含的所有元素
smembers set-key
检查给出的元素是否存在集合中
1代表元素在集合中
sismember set-key item
(integer) 1
0代表所查找的元素不在集合中
sismember set-key item5
(integer) 0
移除元素
srem set-key item2
(integer) 1
将一个元素从一个集合移动到另一个集合
conn.smove(‘set-key’, ‘set-key2’, ‘a’)
交集、并集、差集
HASH
添加和删除键值对的HASH操作
redis散列的更高级特性
hset hash-key shen 25
(integer) 1hset hash-key yang 25
(integer)
获取所有键值对
hgetall hash-key
1) “shen”
2) “25”
3) “yang”
4) “25”
获取指定键的值
hget hash-key yang
“25”
将多个键值对添加到散列里面
conn.hmset(‘hash-key’, {‘k1’:’v1’, ‘k2’: ‘v2’, ‘k3’: ‘v3’})
获取多个键值对
conn.hmget(‘hash-key’, [‘k2’, ‘k3’])
获取键值对数量
conn.hlen(‘hash-key’)
获取散列包含的所有键
conn.hkeys(‘hash-key2’)
[b’long’, b’short’]
检查指定的键是否存在于散列中
conn.hexists(‘hash-key2’, ‘num’)
False
将键key保存的值加上整数increment
conn.hincrby(‘hash-key2’, ‘num’)
1
conn.hexists(‘hash-key2’, ‘num’)
True
ZSET(有序集合)
有序集合的范围型数据获取命令和范围型数据删除命令以及并集和交集
将几个带有分值的成员添加到有序集合中
zadd zset-key 888 treehl
(integer) 1
获取有序集合中的元素
zrange zset-key 0 -1 withscores
1) “hao”
2) “666”
3) “treehl”
4) “888”
5) “yang”
6) “999”
获取给定的分支范围内的元素
zrangebyscore zset-key 0 889 withscores
1) “hao”
2) “666”
3) “treehl”
4) “888”
删除成员
zrem zset-key hao
(integer) 1
在python客户端输入有序集合应该写输入成员再输入分值与redis-cli上的输入是有区别的
conn.zadd(‘zset-key’, ‘a’, 3, ‘b’, 2, ‘c’, 1)
3
查看成员数量
conn.zcard(‘zset-key’)
3
自增操作
conn.zincrby(‘zset-key’, ‘c’, 3)
4.0
返回成员分值
conn.zscore(‘zset-key’, ‘b’)
3.0
返回成员的排名
conn.zrank(‘zset-key’, ‘c’)
2
返回介于min 和 max之间的成员数量
conn.zcount(‘zset-key’, 0, 3)
2
移除指定成员
conn.zrem(‘zset-key’, ‘b’)
1
返回start和stop之间的成员
conn.zrange(‘zset-key’, 0, -1, withscores=True)
[(b’a’, 3.0), (b’c’, 4.0)]
对集合做交集
conn.zinterstore(‘zset-i’, [‘zset-1’, ‘zset-2’])
2
根据元素在有序排列中所处的位置,从有序集合里面获取多个元素
conn.zrange(‘zset-i’, 0, -1, withscores=True)
[(b’c’, 4.0), (b’b’, 6.0)]
对集合做并集
conn.zunionstore(‘zset-u’, [‘zset-1’, ‘zset-2’], aggregate=’min’)
4conn.zrange(‘zset-u’, 0, -1, withscores=True)
[(b’d’, 0.0), (b’a’, 1.0), (b’c’, 1.0), (b’b’, 2.0)]
发布与订阅
发布与订阅的命令
其他命令
排序-sort
conn.rpush(‘sort-input’, 23, 15, 110, 17)
4
conn.sort(‘sort-input’) #升序
[b’15’, b’17’, b’23’, b’110’]
降序
conn.sort(‘sort-input’, alpha=True)
[b’110’, b’15’, b’17’, b’23’]
键的过期和时间
用于处理过期时间的Redis命令
conn.expire(‘key’, 100); conn.ttl(‘key’)
True
100
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true