項目開發git,開通騰訊雲短信,redis使用

1.項目開發git操做html

2.開通騰訊雲短信mysql

3.redis簡單介紹git

 

一.項目開發git操做redis

1.基本流程sql

""" 一、開發前,拉一次遠程倉庫 二、工做區進行開發 三、將開發結果提交到本地版本庫 - git status查看時沒有待處理的事件 四、拉取遠程倉庫(每一次要提交遠程倉庫前必須先拉) 五、若是出現衝突,線下溝通(協商從新開發衝突文件),要從新走三、4步 六、沒有衝突,提交到遠程倉庫 """

2.協同開發數據庫

""" 1)全部人在一個分支上進行開發 - 一般開發分支名爲dev 2)遵循git開發流程:先提交本地版本庫,再拉取服務器代碼,最後提交代碼 提交本地版本庫:git commit -m '版本信息' 拉取服務器代碼:git pull 源名 分支名 提交代碼:git push 源名 分支名 """

3.衝突解決django

"""
若是大家都提交了對方沒有的文件,
須要先拉代碼 git pull
git pull origin dev
:p 退出
把他代碼拉下來了之後,發現沒有衝突,就繼續提交 git push origin dev
1)打開衝突文件 2)定位到衝突位置: >>>>>衝突開始 自身代碼 ==== 衝突代碼 <<<<<<版本號 3)刪除衝突提示信息:>>>>>衝突開始、====、<<<<<<版本號 4)線下溝通整合自身代碼與衝突代碼,造成最終代碼結果 5)從新提交本地版本庫,再拉取服務器代碼,最後提交代碼 """

4.合併分支數組

""" eg:將dev分支內容合併到prod分支上 1)切換到prod分支:git checkout prod 2)合併dev分支:git merge dev """

 

二.開通騰訊雲短信緩存

""" 一、官網註冊實名帳號:https://cloud.tencent.com 二、選取短信服務建立短信應用 三、申請簽名與短信模板 - 經過微信公衆號申請 """

騰訊雲短信二次封裝:安全

libs/txsms/settings.py

# 短信應用 SDK AppID - SDK AppID 以1400開頭
APP_ID = ... # 短信應用 SDK AppKey
APP_KEY = "..."
# 短信模板ID,須要在短信控制檯中申請
TEMPLATE_ID = ... # 簽名 - 是`簽名內容`,而不是`簽名ID`
SMS_SIGN= "..."
# 電話前綴
MOBILE_PREFIX = 86
libs/txsms/sms.py
# 經過MacOS ssl安全認證
import ssl ssl._create_default_https_context = ssl._create_unverified_context # 獲取驗證碼的功能
import random def get_code(): code = ''
    for i in range(4): code += str(random.randint(0, 9)) return code # 短信發送者
from qcloudsms_py import SmsSingleSender from .settings import * sender = SmsSingleSender(APP_ID, APP_KEY) # 發送驗證碼
from utils.logging import logger def send_sms(mobile, code, exp): try: # 發送短信
        response = sender.send_with_param(MOBILE_PREFIX, mobile, TEMPLATE_ID, (code, exp), sign=SMS_SIGN, extend="", ext="") # 成功
        if response and response['result'] == 0: return True # 失敗
        logger.warning('%s - %s' % ('短信發送失敗', response['result'])) except Exception as e: # 異常
        logger.warning('%s - %s' % ('短信發送失敗', e)) return False
libs/txsms/__init__.py
# 包對外提供的功能方法
from .sms import get_code, send_sms
測試
from libs import txsms code = txsms.get_code() print(code) print(txsms.send_sms('電話', code, 5))

 

三.redis簡單介紹

爲何要學習redis數據庫

""" 一、redis是內存 no-sql 數據庫,相比mysql等硬盤數據庫效率高 二、在內存值配置數據庫使用,而不直接使用內存,redis存儲的數據是能夠管理的 三、memcache也是內存數據庫,且django默認採用的就是memcache數據庫,用redis替換memcache的路由很簡單,後者更強大 redis支持更多的數據類型 redis自帶緩存機制,出現數據庫系統崩潰數據也是能夠有找回的功能 redis能夠主動完成數據持久化(自帶數據持久化功能) redis的數據過時時間機制也能夠自身完成 """

 

redis安裝

注:在官網安裝系統版本,下載對應安裝包安裝便可

# 1.安裝redis與可視化操做工具

# 2.在服務中管理redis服務器的開啓關閉

# 3.命令行簡單使用redis:
-- redis-cli # 啓動客戶端
-- set key value # 設置值
-- get key # 取出值

# 4.redis支持:字符串、字典、列表、集合、有序集合
# https://www.runoob.com/redis/redis-tutorial.html

# 5.特色:可持久化、單線程單進程併發

 

redis數據類型

""" 支持的數據類型:String、Hash、List、Set、Sorted Set 1.String:存儲其餘類型不能存的全部數據 2.Hash:存儲 key-value 形式數據,相似於字典 3.List:存儲 一系列有序value 形式數據,列表(數組) 4.Set:存儲 一系列無序value 形式數據,集合 5.Sorted Set:存儲 有排列標號value 形式數據,排行 """

 

字符串類型

""" 重要方法 set:key value get:key mset:k1 v1 k2 v2 ... kn vn mget:k1 k2 ... kn setex:key exp value """

 1.String類型存取

 1 set(self, name, value, ex=None, px=None, nx=False, xx=False)  2 
 3 #在Redis中設置值,默認不存在則建立,存在則修改
 4 red.set('key', 'value')  5 #參數:
 6 # set(name, value, ex=None, px=None, nx=False, xx=False)
 7 # ex,過時時間(秒)
 8 # px,過時時間(毫秒)
 9 # nx,若是設置爲True,則只有key不存在時,當前set操做才執行,同#setnx(key, value)
10 # xx,若是設置爲True,則只有key存在時,當前set操做才執行
11 
12 
13 setex(self, name, value, time) 14 #設置過時時間(秒)
15 
16 psetex(self, name, time_ms, value) 17 #設置過時時間(豪秒)
18 mset(self, *args, **kwargs) 19 
20 #批量設置值
21 red.mget({"key1":'value1', "key2":'value2'}) 22 get(self, name) 23 
24 #獲取某個key的值
25 red.get('key1') 26 mget(self, keys, *args) 27 
28 #批量獲取
29 red.mget("key1","key1") 30 strlen(self, name) 31 
32 #返回key對應值的字節長度(一個漢字3個字節)
33 red.strlen("key") 34 append(name, value) 35 
36 #在name對應的值後面追加內容
37 red.set("key","value") 38 print(r.get("key"))    #輸出:'value'
39 r.append("key","one") 40 print(r.get("key"))    #輸出:'valueone'
41
View Code

2.Hash類型:一個name對應一個dic字典來存儲

 

 1 hset(self, name, key, value)  2 
 3 #name對應的hash中設置一個鍵值對(不存在,則建立,不然,修改)
 4 red.hset("name","key","value")  5 hget(self, name, key)  6 
 7 red.hset("name","key","value")  8 #在name對應的hash中根據key獲取value
 9 print(red.hget("name","key"))#輸出:'value'
10 hgetall(self, name) 11 
12 #獲取name全部鍵值對
13 red.hgetall("name") 14 hmset(self, name, mapping) 15 
16 #在name對應的hash中批量設置鍵值對,mapping:字典
17 dic={"key1":"aa","key2":"bb"} 18 red.hmset("name",dic) 19 print(red.hget("name","key2"))#輸出:bb
20 hmget(self, name, keys, *args) 21 
22 #在name對應的hash中批量獲取鍵所對應的值
23 dic={"key1":"aa","key2":"bb"} 24 red.hmset("name",dic) 25 print(red.hmget("name","key1","key2"))#輸出:['aa', 'bb']
26 hlen(self, name) 27 
28 #獲取hash鍵值對的個數
29 print(red.hlen("name"))#輸出:2
30 hkeys(self, name) 31 
32 #獲取hash中全部key
33 red.hkeys("name") 34 hvals(self, name) 35 
36 #獲取hash中全部value
37 red.hvals("name") 38 hexists(self, name, key) 39 
40 #檢查name對應的hash是否存在當前傳入的key
41 print(red.hexists("name","key1"))#輸出:Ture
42 hdel(self, name, *keys) 43 
44 #刪除指定name對應的key所在的鍵值對,刪除成功返回1,失敗返回0
45 print(red.hdel("name","key1"))#輸出:1
46 hincrby(self, name, key, amount=1) 47 
48 #與hash中key對應的值相加,不存在則建立key=amount(amount爲整數)
49 print(red.hincrby("name","key",amount=10))#返回:10
50
View Code

3.list類型:一個name對應一個列表存儲

 1 lpush(self, name, *values)  2 
 3 #元素從list的左邊添加,能夠添加多個
 4 red.lpush('name','元素1','元素2')  5 rpush(self, name, *values)  6 
 7 #元素從list右邊添加,能夠添加多個
 8 red.rpush('name','元素1','元素2')  9 lpushx(self, name, *values) 10 
11 #當name存在時,元素才能從list的左邊加入
12 red.lpushx('name','元素1') 13 rpushx(self, name, *values) 14 
15 #當name存在時,元素才能從list的右邊加入
16 red.rpushx('name','元素1') 17  llen(self, name) 18 
19 #name列表長度
20 red.llen('name') 21 linsert(self, name, where, refvalue, value) 22 
23 複製代碼 24 # 在name對應的列表的某一個值前或後插入一個新值
25 red.linsert("name","BEFORE","元素2","元素1.5")#在列表內找到第一個"元素2",在它前面插入"元素1.5"
26 
27 #參數:
28 # name: redis的name
29 # where: BEFORE(前)或AFTER(後)
30 # refvalue: 列表內的值
31 # value: 要插入的數據
32 複製代碼 33 lset(self, name, index, value) 34 
35 #對list中的某一個索引位置從新賦值
36 red.lset("name",0,"abc") 37 lrem(self, name, value, num=0) 38 
39 複製代碼 40 #刪除name對應的list中的指定值
41 red.lrem("name","元素1",num=0) 42 
43 # 參數:
44 # name: redis的name
45 # value: 要刪除的值
46 # num: num=0 刪除列表中全部的指定值;
47 # num=2 從前到後,刪除2個;
48 # num=-2 從後向前,刪除2個'''
49 複製代碼 50 lpop(self, name) 51 
52 #移除列表的左側第一個元素,返回值則是第一個元素
53 print(red.lpop("name")) 54 lindex(self, name, index) 55 
56 #根據索引獲取列表內元素
57 print(red.lindex("name",1)) 58 lrange(self, name, start, end) 59 
60 #分片獲取元素
61 print(red.lrange("name",0,-1)) 62 ltrim(self, name, start, end) 63 
64 #移除列表內沒有在該索引以內的值
65 red.ltrim("name",0,2)
View Code

4.set集合:集合是不容許重複的列表

 1 sadd(self, name, *values)  2 
 3 #給name對應的集合中添加元素
 4 red.sadd("name","aa")  5 red.sadd("name","aa","bb")  6 scard(self, name)  7 
 8 #獲取name對應的集合中的元素個數
 9 red.scard("name") 10 smembers(self, name) 11 
12 #獲取name對應的集合的全部成員
13 red.smembers('name') 14 sdiff(self, keys, *args) 15 
16 複製代碼 17 #在第一個name對應的集合中且不在其餘name對應的集合的元素集合
18 red.sadd("name","aa","bb") 19 red.sadd("name1","bb","cc") 20 red.sadd("name2","bb","cc","dd") 21 
22 print(red.sdiff("name","name1","name2"))#輸出:{aa}
23 複製代碼 24 sismember(self, name, value) 25 
26 #檢查value是不是name對應的集合內的元素
27 smove(self, src, dst, value) 28 
29 #將某個元素從一個集合中移動到另一個集合
30 spop(self, name) 31 
32 #從集合的右側移除一個元素,並將其返回
View Code

5.其餘操做

 1 flushdb(self,asynchronous=False)  2 
 3 #清空當前db中的數據,默認是同步。若開啓異步asynchronous=True,會新起一個線程進行清空操做,不阻塞主線程
 4 flushall(self,asynchronous=False)  5 
 6 #清空全部db中的數據,默認是同步。異步同flushdb
 7 delete(self, *names)  8 
 9 #根據name刪除redis中的任意數據類型
10 exists(self, name) 11 
12 #檢查redis的name是否存在
13 keys(self, pattern='*') 14 
15 #根據* ?等通配符匹配獲取redis的name
16 expire(self,name ,time) 17 
18 #爲某個name的設置過時時間
19 rename(self, src, dst) 20 
21 #重命名
22 move(self, name, db)) 23 
24 # 將redis的某個name移動到指定的db下
25 randomkey(self) 26 
27 #隨機獲取一個redis的name(不刪除)
28 type(self, name) 29 
30 # 獲取name對應值的類型
View Code

 

pycharm使用redis

依賴:須要在終端安裝

pip3 install redis

 

直接使用:

import redis r = redis.Redis(host='127.0.0.1', port=6379)

 

鏈接池使用:

import redis pool = redis.ConnectionPool(host='127.0.0.1', port=6379) r = redis.Redis(connection_pool=pool)

 

緩存使用:(這個須要額外的在終端安裝 pip3 install django-redias )重要***********************

# 1.將緩存存儲位置配置到redis中:settings.py
CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/10", # 10 表明放入redis的第十個數據庫,由於redis自帶15個數據庫
        "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "CONNECTION_POOL_KWARGS": {"max_connections": 100} } } } # 2.操做cache模塊直接操做緩存:views.py
from django.core.cache import cache  # 結合配置文件實現插拔式 # 存放token,能夠直接設置過時時間
cache.set('token', 'header.payload.signature', 10) # 取出token
token = cache.get('token')
相關文章
相關標籤/搜索