這兩天在做Python的每日一練,感覺收獲頗豐,所以來記錄分享一下,一共做了三個,涉及socket,PIL,pymysql三個庫,另外終於開始了Flask框架的學習,后續也會做出一些分析
第一個是一個簡單的socket練習,主要就是實現兩個終端之間的交互,此次原本想是服務端腳本放在虛擬機里,然后主機當作客戶端實現交互,可是,所有端口都放行,防火牆也設置通過之后,還是無法實現交互,總是被拒絕連接,之后只好在一台機子上進行測試,遂成功。
下面簡單記錄一下這次的socket(安全套接字)的基本步驟:
首先就是要有兩個端的腳本,一個server端的,一個client端的。
server端主要有以下功能:
1、設置服務端口,並與主機綁定(突然想到可能由於沒有設置地址的原因導致主機無法ip訪問
)
2、反饋信息,當客戶端訪問時
client端主要是以下功能:
1、向服務端發送請求訪問信息
2、獲取服務端反饋信息
代碼仍需改善這次就不貼出了丟人了
,大致實現效果如下

第二個是實現在圖片的右上角添加文字,主要涉及到PIL庫的一些相關模塊,首先PIL是專門用於對圖片進行操作的庫,所以加強對其掌握還是很有必要的,閑話不多說,來看一下這個題目:
1、想要實現在圖片上寫文字,主要是這樣一個思路,實例化一個圖片對象,然后選擇填充文字的字體和顏色進行填充即可
注:對於定位到右上角這樣的問題,我的理解是這樣的,首先一個圖片的坐標,從左上角開始定位是(0,0),而偏移符合我們高中數學函數平移的規則,即左加右減原則,所以移到右上角只要在寬度的基礎上減去一個值即可
下面是代碼示例和最終效果截圖:
1 # -*- coding:utf-8 -*- 2 # 每日一練:將你的 QQ 頭像(或者微博頭像)右上角加上紅色的數字 3 # 類似於微信未讀信息數量那種提示效果。 4 # Author : Konmu 5 6 from PIL import Image,ImageFont,ImageDraw 7 8 def Image_fill(im_file,num): 9 im=Image.open(im_file) 10 width,height=im.size 11 font_type=ImageFont.truetype('C:/Windows/fonts/字酷堂海藏楷體.ttf',50) 12 fill_color='steelblue' 13 draw=ImageDraw.ImageDraw(im) 14 draw.text((width-50,0),str(num),fill=fill_color,font=font_type) 15 #圖片坐標左上角開始為原點,平移符合了左加右減原則 16 #故到達右上角即減去一個偏移量即可 17 save_file='C:/Users/xxx/Desktop/output.jpg' 18 im.save(save_file) 19 20 if __name__=='__main__': 21 Image_fill('C:/Users/xxx/Desktop/少天.jpg',21)
最終效果:

第三個是實現生成20個隨機激活碼並保存至關聯性數據庫mysql中,對於python對數據庫的操作俗說君也是第一次接觸故而這次也是簡單的學習了一下,后續還需加強練習。
分析一下這個問題,首先生成激活碼這種事並不難,我們平時玩游戲時領取禮包的一些激活碼可以發現大多都是一些字母和數字的組合,所以我們只要生成一些類似這樣形式的字符串即可模擬出激活碼的效果。剩下來就是解決他的存儲問題,python中提供了pymysql庫幫助我們和mysql數據庫進行連接,我們這里也采用這個庫來實現我們的目標。
下面先來看幾個本次會用到的基本的mysql語句,其他詳細的語法請自行查閱:
1 create database test; #創建數據庫 2 create table gencode(id int auto_increment primary key,value varchar(20)); #創建數據表,id 是采用的自增長型 3 insert into gencode(id,value) values (1,'GB0XRF2boYF2BPEp46l5') #向表中插入數據,這里要注意數據的類型 4 drop table if exists test; #刪除已存在的表
接下來看看pymysql的相關語句:
1 db=pymysql.connect('localhost','user','password','table') #連接本地數據庫,其中用戶,密碼和數據庫填寫自己的信息即可 2 cursor=db.cursor() #創建cursor對象 3 cursor.execute(sql) #執行相關sql語句 4 db.commit() #提交數據到數據庫 5 db.close() #關閉數據庫
下面來看看完整代碼和最終效果:
1 #!/user/bin/python3 2 #-*-coding:utf-8 *-* 3 #Author:konmu 4 #生成激活碼(或者優惠券),使用 Python 如何生成20個激活碼(或者優惠券)?將生成的激活碼(或者優惠券)保存到 MySQL 關系型數據庫中。 5 6 import pymysql 7 import random,string 8 9 def genkey(): 10 getChars = string.ascii_letters+string.digits 11 generate = "".join([random.choice(getChars)for i in range(20)]) 12 return(generate) 13 14 def table_insert(cursor, db): 15 for i in range(20): 16 sql = "insert into gencode (id,value) values ({0},'{1}')".format("null", genkey())#向表中插入數據 17 cursor.execute(sql) 18 db.commit() 19 20 if __name__=='__main__': 21 db = pymysql.connect("localhost", "root", "123456", "test")#本次測試使用的數據庫是test 22 cursor = db.cursor()#創建cursor對象 23 cursor.execute("drop table if exists gencode")#刪除gencode表如果已存在的話 24 sql = "create table generateCodes(id int auto_increment primary key, value varchar(50))"#創建表 25 try: 26 cursor.execute(sql) 27 db.commit() 28 except: 29 db.rollback() 30 genkey() 31 table_insert(cursor, db) 32 db.close()
最終效果:

