一、python 基礎(chǔ)入門篇
1.python下載與安裝
下載略。
pycharm 2019.3.2pj,https://www.cnblogs.com/fxzz/p/12016671.html
安裝版本3.8,如下:
自定義安裝
不用管直接next
image.png
安裝成功
image.png
安裝python的同時(shí)會(huì)幫我們裝idle,可以進(jìn)行補(bǔ)全碉熄、代碼保存等操作箱季。
idle
輸入exit() 退出交互頁面玄柏。python擴(kuò)展名.py兼呵。
2.python基礎(chǔ)用法
字符串太長(zhǎng)畸写,可以用“\”代表換行驮瞧。在python中不要隨便縮進(jìn)。標(biāo)識(shí)符遵循兩種命名規(guī)范枯芬,一:大駝峰YangMi,二:下劃線小寫字母 yang_mi
在python中數(shù)值分整數(shù)论笔、小數(shù)、復(fù)數(shù)三種破停。如果數(shù)字長(zhǎng)度很大翅楼,可以使用下劃線作分隔符。
# 注釋
print('') # 單行注釋
print(r'C:\some\name') # 用r正常輸出r真慢,r代表可以輸出原始字符串
print("""\
第一行
縮進(jìn)的第二行
縮進(jìn)的第三行
""")# \代表忽略換行毅臊,不加會(huì)幫我們換行
print(2 * '冪' + 'wq') # 冪冪wq
word = 'Python'
print(word[0]) # 輸出P
print(word[-0]) # 輸出P
print(word[0:5]) # 輸出Pytho
print(word[0:6]) # 輸出Python
print(word[0:100]) # 輸出Python
print(word[-6]) # 輸出P
print(2**4) # 輸出2的4次方等于16
print(123_4567_890) # 1234567890 下劃線作分隔符
s = 'wuqing'
print(len(s)) # 6
# if
x = int(input("Please enter an integer: "))
# Please enter an integer: 42
if x < 0:
x = 0
print('Negative changed to zero')
elif x == 0:
print('Zero')
elif x == 1:
print('Single')
else:
print('More')
# 輸出:
# 慶 1
# 冪冪 2
words = ['慶', '冪冪']
for w in words:
print(w, len(w))
words = ['cat', 'window', 'defenestrate']
for w in words[:]: # Loop over a slice copy of the entire list. 如果寫成 for w in words:,這個(gè)示例就會(huì)創(chuàng)建無限長(zhǎng)的列表黑界,一次又一次重復(fù)地插入 defenestrate管嬉。
if len(w) > 6:
words.insert(1, w)
# words.remove(w)
print(words)
for i in range(0,10,4):
print(i, end=' ') # 實(shí)現(xiàn)輸出不換行
print(list(range(0,10,4))) # [0, 4, 8]
-
文件操作
文件打開與關(guān)閉
對(duì)文件不存在,拋出異常信息進(jìn)行異常處理
捕獲文件不存在異常 -
文件的簡(jiǎn)單讀取
文件簡(jiǎn)單讀取 -
讀取大文件
while循環(huán)讀取大文件 - 通過readline朗鸠、readlines讀取文件
readline蚯撩、readlines讀取
- 文件寫入
文件寫入
- 二進(jìn)制文件
file_name = 'c:/Users/ym/Desktop/愛的供養(yǎng).flac'
# 讀取模式
# t 讀取文本文件(默認(rèn)值)
# b 讀取二進(jìn)制文件
with open(file_name , 'rb') as file_obj:
# 讀取文本文件時(shí),size是以字符為單位的
# 讀取二進(jìn)制文件時(shí)烛占,size是以字節(jié)為單位
# print(file_obj.read(100))
# 將讀取到的內(nèi)容寫出來
# 定義一個(gè)新的文件
new_name = 'aa.flac'
with open(new_name , 'wb') as new_obj:
# 定義每次讀取的大小
chunk = 1024 * 100
while True :
# 從已有的對(duì)象中讀取數(shù)據(jù)
content = file_obj.read(chunk)
# 內(nèi)容讀取完畢胎挎,終止循環(huán)
if not content :
break
# 將讀取到的數(shù)據(jù)寫入到新對(duì)象中
new_obj.write(content)
- 讀取文件的位置
英文的話一個(gè)字節(jié)也是一個(gè)字符沟启,中文三個(gè)字節(jié)一個(gè)字符 。
# with open('demo.txt','rb') as file_obj:
# # print(file_obj.read(100))
# # print(file_obj.read(30))
# # seek() 可以修改當(dāng)前讀取的位置
# file_obj.seek(55)
# file_obj.seek(80,0)
# file_obj.seek(70,1)
# file_obj.seek(-10,2)
# # seek()需要兩個(gè)參數(shù)
# # 第一個(gè) 是要切換到的位置
# # 第二個(gè) 計(jì)算位置方式
# # 可選值:
# # 0 從頭計(jì)算犹菇,默認(rèn)值
# # 1 從當(dāng)前位置計(jì)算
# # 2 從最后位置開始計(jì)算
# print(file_obj.read())
# # tell() 方法用來查看當(dāng)前讀取的位置
# print('當(dāng)前讀取到了 -->',file_obj.tell())
with open('demo2.txt','rt' , encoding='utf-8') as file_obj:
# print(file_obj.read(100))
# print(file_obj.read(30))
# seek() 可以修改當(dāng)前讀取的位置
file_obj.seek(9)
# seek()需要兩個(gè)參數(shù)
# 第一個(gè) 是要切換到的位置
# 第二個(gè) 計(jì)算位置方式
# 可選值:
# 0 從頭計(jì)算德迹,默認(rèn)值
# 1 從當(dāng)前位置計(jì)算
# 2 從最后位置開始計(jì)算
print(file_obj.read())
# tell() 方法用來查看當(dāng)前讀取的位置
print('當(dāng)前讀取到了 -->',file_obj.tell())
- 文件的其他操作
import os
from pprint import pprint
# os.listdir() 獲取指定目錄的目錄結(jié)構(gòu)
# 需要一個(gè)路徑作為參數(shù),會(huì)獲取到該路徑下的目錄結(jié)構(gòu)揭芍,默認(rèn)路徑為 . 當(dāng)前目錄
# 該方法會(huì)返回一個(gè)列表胳搞,目錄中的每一個(gè)文件(夾)的名字都是列表中的一個(gè)元素
r = os.listdir()
# os.getcwd() 獲取當(dāng)前所在的目錄
r = os.getcwd()
# os.chdir() 切換當(dāng)前所在的目錄 作用相當(dāng)于 cd
# os.chdir('c:/')
# r = os.getcwd()
# 創(chuàng)建目錄
# os.mkdir("aaa") # 在當(dāng)前目錄下創(chuàng)建一個(gè)名字為 aaa 的目錄
# 刪除目錄
# os.rmdir('abc')
# open('aa.txt','w')
# 刪除文件
# os.remove('aa.txt')
# os.rename('舊名字','新名字') 可以對(duì)一個(gè)文件進(jìn)行重命名,也可以用來移動(dòng)一個(gè)文件
# os.rename('aa.txt','bb.txt')
os.rename('bb.txt','c:/users/ym/desktop/wq.txt')
pprint(r)
二称杨、django web端開發(fā)
開發(fā)環(huán)境搭建
下載一個(gè)conda包管理工具肌毅。
- conda的包管理
anaconda為我們提供方便的包管理命令——conda, 下面我們來看看都有哪些有用的命令吧!
配置下國(guó)內(nèi)鏡像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
# 查看已經(jīng)安裝的packages
conda list
# 查看已經(jīng)安裝的虛擬環(huán)境
conda info --env
# 查看某個(gè)指定環(huán)境的已安裝包
conda list -n python34
# 查找package信息
conda search numpy
# 安裝scipy
conda install scipy
# 安裝package
# 如果不用-n指定環(huán)境名稱姑原,則被安裝在當(dāng)前活躍環(huán)境
conda install -n python34 numpy
# 更新package
conda update -n python34 numpy
# 刪除package
conda remove -n python34 numpy
由于conda將conda悬而、python等都視為package,因此页衙,完全可以使用conda來管理conda和python的版本摊滔,例如
# 更新conda,保持conda最新
conda update conda
# 更新anaconda
conda update anaconda
# 更新python
conda update python
- 安裝pycharm店乐,略。
配置下新建py文件的模板呻袭,可以添加作者眨八、創(chuàng)建時(shí)間信息等。配置模板
- django項(xiàng)目start~~
這一塊的前提是我們首先在安裝python的前提下左电,打開cmd,輸入pip 命令有正常輸出廉侧,則可以進(jìn)行下一步安裝虛擬環(huán)境,虛擬環(huán)境的目的保證我們的python應(yīng)用間的獨(dú)立篓足,像版本升級(jí)啥的不會(huì)影響到其他項(xiàng)目段誊。
- virtualenv
(1)pip install virtualenv
virtualenv -p 指定python安裝路徑
在linux 下安裝virtualenv,sudu apt-get install python-virtualenv
virtualenv 虛擬環(huán)境名稱,source activate栈拖。這里我們測(cè)試下连舍,
(2)virtualenv testwqenv 創(chuàng)建一個(gè)虛擬環(huán)境
這種不指定路徑默認(rèn)裝在cmd當(dāng)前運(yùn)行目錄的,然后創(chuàng)建完涩哟,可以進(jìn)入到虛擬環(huán)境索赏,通過cd testwqenv,dir列出文件列表,然后再進(jìn)入Scripts目錄贴彼,會(huì)發(fā)現(xiàn)有個(gè)activate.bat
文件直接運(yùn)行該文件。成功進(jìn)入到我們的虛擬環(huán)境
(3)可通過pip list查看當(dāng)前的虛擬環(huán)境安裝了哪些庫(kù)威鹿。通過deactivate.bat
退出虛擬環(huán)境炸渡。
這種虛擬環(huán)境還得需要我們知道安裝的虛擬環(huán)境目錄,這樣比較麻煩,所以接下來介紹另一種方式煤蚌。
- virtualenvwrapper
(1)pip install virtualenvwrapper-win 革骨,因?yàn)槲覀兪窃趙indows環(huán)境下安裝并村,所以需要添加
-win
巍实。
(2)mkvirtualenv wqwrapperenv 創(chuàng)建一個(gè)名為wqwrapperenv新的虛擬環(huán)境。安裝完畢后哩牍,它會(huì)自動(dòng)進(jìn)入到我們的虛擬環(huán)境棚潦。如果想通過python3版本來安裝 虛擬環(huán)境,則mkvirtualenv --python=python3的安裝路徑\python.exe [虛擬環(huán)境名稱]膝昆;
(3)deactivate 退出虛擬環(huán)境
(4)workon 查看當(dāng)前有哪些虛擬環(huán)境
workon 是virtualenvwrapper的一個(gè)命令丸边,列出所有的虛擬環(huán)境。
(5)rmvirtualenv 刪除虛擬環(huán)境荚孵,慎用妹窖。
(6)workon wqwrapperenv,進(jìn)入到我們剛新建的wqwrapperenv的虛擬環(huán)境中。
可以在環(huán)境變量里添加一個(gè)WORKON_HOME
指定虛擬環(huán)境的目錄处窥,這樣在創(chuàng)建虛擬環(huán)境時(shí)會(huì)自動(dòng)識(shí)別到并創(chuàng)建在指定的目錄下嘱吗。如上是在windows下可以直接通過mkvirtualenv創(chuàng)建一個(gè)虛擬環(huán)境,但是linux下需要配置~/.bashrc修改workon_home等信息linux下需要配置
然后通過source ~/.bashrc即可生效滔驾。linux下創(chuàng)建python3的虛擬環(huán)境。linux下創(chuàng)建Python3的虛擬環(huán)境
windows新建虛擬環(huán)境
選擇我們虛擬環(huán)境下的解釋器
在上面虛擬環(huán)境創(chuàng)建完畢后俄讹,我們可以先在虛擬環(huán)境中哆致,pip install django -i https://pypi.doubanio.com/simple,因?yàn)槲覀冃陆ǖ氖莇jango框架的項(xiàng)目患膛。
新建一個(gè)django項(xiàng)目需要指定虛擬環(huán)境
1.新建一個(gè)項(xiàng)目,New Project,這里由于應(yīng)用都有個(gè)用戶模塊摊阀,所以在初始時(shí)新建一個(gè)名叫users的app
開始創(chuàng)建一個(gè)django項(xiàng)目
2.在settings.py中配置mysql數(shù)據(jù)庫(kù),因?yàn)樾枰猰ysql數(shù)據(jù)驅(qū)動(dòng)踪蹬,先pip install mysqlclient胞此。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': "gcgs_wechat",
'USER': 'root',
'PASSWORD': "123456",
'HOST': "127.0.0.1"
}
}
3.在settings.py中修改配置中文顯示以及時(shí)區(qū)相關(guān)配置
#設(shè)置時(shí)區(qū)
LANGUAGE_CODE = 'zh-hans' #中文支持,django1.8以后支持跃捣;1.8以前是zh-cn
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
4.配置靜態(tài)文件目錄以及媒體文件目錄
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static') #需要在根目錄下建立一個(gè)static目錄
]
MEDIA_URL = '/static/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'static/media') #它跟上面不一樣不是列表
##完了以后搜索context_processors上添加media處理器
'django.template.context_processors.media'
4.引入include,配置users相關(guān)路由
5.創(chuàng)建其他app
python manage.py startapp app名稱
5.在settings.py中INSTALLED_APPS中添加剛創(chuàng)建的app
6.在urls.py中配置分發(fā)子路由漱牵。
7.由于創(chuàng)建了多個(gè)app和原有的都混在一個(gè)目錄下,那么接下來我們可以自己創(chuàng)建一個(gè)包進(jìn)行管理疚漆。新建一個(gè)python package命名為apps酣胀。再把我們之前創(chuàng)建的app全部移到新的apps包下刁赦,注意移的時(shí)候兩個(gè)勾全部去掉。再給apps右擊標(biāo)記為sources root闻镶,將我們自己定義的包加入到python的搜尋環(huán)境變量中甚脉。(在setttings.py引入sys(python環(huán)境變量),將apps環(huán)境變量通過sys.path.insert進(jìn)來) 如果有第三方的包我 們可以新建一個(gè)extra_apps存放也需要右擊標(biāo)記為sources root铆农。
8.在models.py中建立模型
9.在settings.py中添加Auth_user_model來替換系統(tǒng)用戶
10.通過python manage.py makemigrations[可以跟app名牺氨,不跟的話就是全部]創(chuàng)建完再python manage.py migrate完成遷移
python manage.py collectstatic
11.導(dǎo)入導(dǎo)出可以通過python manage.py dumpdata > test.json導(dǎo)出數(shù)據(jù),再通過python manage.py loaddata test.json將數(shù)據(jù)導(dǎo)入墩剖。
啟動(dòng)項(xiàng)目
python manage.py runserver
python豆瓣源
將原有應(yīng)用下載的包的版本都導(dǎo)出到一個(gè)文件文件中:
pip freeze > requirements.txt
再在新應(yīng)用中通過pip install -r requirements.txt -i https://pypi.doubanio.com/simple
pip install virtualenv
pip uninstall django
pip install django -i https://pypi.doubanio.com/simple
后面項(xiàng)目起來后猴凹,因?yàn)槲覀兣渲玫氖莔ysql數(shù)據(jù)庫(kù),還需要安裝mysqlclient
在windows安裝包出錯(cuò)的時(shí)候涛碑,可以去此網(wǎng)站找精堕。
https://www.lfd.uci.edu/~gohlke/pythonlibs/
常用的依賴包:
安裝djangorestframework
pip install django -i https://pypi.doubanio.com/simple
pip install markdown
pip install django-filter
安裝過程
mysqlclient
pillow 圖片處理的包
第三方包
DjangoUeditor
migrations原理及表生成
前提是要將我們之前定義的 app放在 settints.py里的INSTALLED_APPS中去。
通過python manage.py makemigrations
再python manage.py migrate
之后 對(duì)表模型修改后都先執(zhí)行上面兩步蒲障,django怎么知道m(xù)igrate哪一步呢歹篓,是因?yàn)樵跀?shù)據(jù)庫(kù)里有張django_migrations表會(huì)記錄已經(jīng)運(yùn)行了哪些文件。如果發(fā)現(xiàn)執(zhí)行不了的時(shí)候揉阎,可以將某塊的記錄刪除 庄撮,這樣它就能重新跑了。盡量使用代碼的方式修改表信息毙籽。
djangoadmin
默認(rèn)它是不會(huì)幫我們創(chuàng)建user的洞斯,我們可以通過createsuperuser來創(chuàng)建。默認(rèn)是用戶名和密碼登錄 的方式坑赡。在settings.py中修改配置中文顯示以及時(shí)區(qū)相關(guān)配置烙如。可以在users的app下修改admin.py注冊(cè)我們的django管理系統(tǒng)毅否。注冊(cè)管理系統(tǒng)
xadmin
有兩種安裝方式
第一種:通過workon 我們的虛擬環(huán)境 亚铁,然后pip install xadmin,安裝完后在settings.py的installed_apps下將xadmin還有crispy_forms添加進(jìn)來即可。然后在urls.py中進(jìn)行修改螟加,將原來的admin給替換成xadmin.
并將原來user的app下的admin.py的東西刪掉徘溢。然后再需要makemigrations及migrate將xadmin的表同步進(jìn)來。image.png
第二種是通過源碼安裝的方式:
在github官網(wǎng)搜索xadmin,將它的源碼download下來捆探。
下載下來以后然爆,將里面的xadmin拷貝到我們的extra_apps中。下載xadmin
安裝完后黍图, 需要將model進(jìn)行注冊(cè)到xadmin中曾雕,在每個(gè)app下新建一個(gè)adminx.py(注這個(gè)名字固定,xadmin會(huì)自動(dòng)搜索到)
注冊(cè)用戶到xadmin中
顯示自定義
自定義顯示字段以及搜索字段雌隅、過濾字段
獨(dú)立使用django的model
獨(dú)立使用django的model
Restful接口
幾大動(dòng)詞
json格式返回
modeltodict方式
serializer序列化model
image.png
image.png
踩坑:
AttributeError: 'AutoSchema' object has no attribute 'get_link'異常處理
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema',
),
# 'DEFAULT_THROTTLE_CLASSES': (
# 'rest_framework.throttling.AnonRateThrottle',
# 'rest_framework.throttling.UserRateThrottle'
# ),
# 'DEFAULT_THROTTLE_RATES': {
# 'anon': '2/minute',
# 'user': '3/minute'
# }
}
ApiView
apiview
ModelSerializer
class SnippetSerializer(serializers.ModelSerializer):
class Meta:
model = Snippet
fields = ['id', 'title', 'code', 'linenos', 'language', 'style']
如果想取出所有字段翻默,(它會(huì)將外鍵序列化它的id)則可以:
取出所有字段
如果我們不想只序列化外鍵id缸沃,則可以將外鍵所在的實(shí)體也定義一個(gè)serializer,然后進(jìn)行嵌套即可修械。
嵌套serializer
GenericAPIView
from rest_framework import mixins
from rest_framework import generics
繼承mixins.ListModelMixin, generics.GenericAPIView
如果 在里面不 寫get請(qǐng)求 它是以為 你這方法 是不被允許get的趾牧,會(huì)提示錯(cuò)誤“get”不被允許。
GenericAPIView
如果不想上面那么麻煩寫get,可以通過繼承ListApiView肯污,因?yàn)樗鼛臀覀儗懞昧恕?div id="q6eqe8y" class="image-package">ListApiView