python django入門(mén)
1.mvc vs mvt
mvc:
m:model數(shù)據(jù)模型(將數(shù)據(jù)從數(shù)據(jù)庫(kù)查詢(xún)出來(lái),再加工成前臺(tái)需要的數(shù)據(jù),統(tǒng)稱(chēng)數(shù)據(jù)模型層)
c:controller控制層(接受請(qǐng)求,接受請(qǐng)求數(shù)據(jù),返回?cái)?shù)據(jù)的代碼層)
v:視圖層(展示給用戶看的層,比如網(wǎng)頁(yè)、app、顯示器等)
mvt:
m:同上
v:同上面的c
t:template模板的意思(比如京東瀏覽任何一個(gè)商品的詳情頁(yè)都是類(lèi)似的頁(yè)面只是數(shù)據(jù)不同,就可以寫(xiě)一個(gè)頁(yè)面然后填充不同的數(shù)據(jù),這個(gè)相同的頁(yè)面就是模板)
2.虛擬環(huán)境
python為了不同項(xiàng)目之間版本不沖突,創(chuàng)建了虛擬環(huán)境的概念
問(wèn)題:如果在一臺(tái)電腦上, 想開(kāi)發(fā)多個(gè)不同的項(xiàng)目, 需要用到同一個(gè)包的不同版本, 如果使用上面的命令, 在同一個(gè)目錄下安裝或者更新, 新版本會(huì)覆蓋以前的版本, 其它的項(xiàng)目就無(wú)法運(yùn)行了. 解決方案:虛擬環(huán)境 作用:虛擬環(huán)境可以搭建獨(dú)立的python運(yùn)行環(huán)境, 使得單個(gè)項(xiàng)目的運(yùn)行環(huán)境與其它項(xiàng)目互不影響.
虛擬環(huán)境安裝:
pip install virtualenv pip install virtualenvwrapper 可以使用豆瓣的鏡像 pip install virtualen -i https://pypi.douban.com/simple
創(chuàng)建虛擬環(huán)境的命令:
mkvirtualenv -p python3 虛擬環(huán)境名稱(chēng) 例 : mkvirtualenv -p python3 py3_django
進(jìn)入虛擬環(huán)境:
workon py3_django
刪除虛擬環(huán)境的命令 :
rmvirtualenv 虛擬環(huán)境名稱(chēng) 刪除的時(shí)候需要先退出虛擬環(huán)境 先退出:deactivate 再刪除:rmvirtualenv py3_django
3.安裝包
項(xiàng)目的運(yùn)行需要各種各樣的包,都需要安裝
進(jìn)入虛擬環(huán)境后安裝命令:
pip install 模塊名 -i https://pypi.douban.com/simple(這里使用豆瓣鏡像) 例如: pip install django==2.1.1 -i https://pypi.douban.com/simple 如果不指定版本 pip install django -i https://pypi.douban.com/simple 默認(rèn)安裝最新版本 卸載: pip uninstall xxxx 查看已安裝列表: pip list
4.創(chuàng)建django項(xiàng)目
django-admin startproject daping(項(xiàng)目名)
使用pycharm打開(kāi)
為項(xiàng)目配置虛擬環(huán)境:
運(yùn)行項(xiàng)目:
可以使用cmd進(jìn)入項(xiàng)目目錄運(yùn)行 也可以點(diǎn)擊pycharm左下角的terminal運(yùn)行(運(yùn)行的時(shí)候需要進(jìn)入虛擬環(huán)境) python manage.py runserver ip:端口 或: python manage.py runserver 可以不寫(xiě)IP和端口,默認(rèn)IP是127.0.0.1,默認(rèn)端口為8000。 啟動(dòng)后在頁(yè)面訪問(wèn) 127.0.0.1:8000 有個(gè)小火箭就是成功了
5.創(chuàng)建應(yīng)用
每個(gè)項(xiàng)目都會(huì)有很多模塊,比如商城有支付、物流等,而支付跟物流顯然都是很多項(xiàng)目可以共用的,
為了達(dá)到復(fù)用的目的,python提出了應(yīng)用的概念,把每個(gè)模塊單獨(dú)創(chuàng)建為一個(gè)應(yīng)用,就可以很方便的達(dá)到復(fù)用的目的
python manage.py startapp 子應(yīng)用名稱(chēng) tips:如果在其他目錄下可以通過(guò)相對(duì)路徑找到manage.py 例如:python manage.py startapp pay (在大平的目錄下創(chuàng)建了一個(gè)名為pay的應(yīng)用)
創(chuàng)建了子應(yīng)用,需要在項(xiàng)目的全局配置中加入子應(yīng)用
setting----INSTALLED_APPS---找到最后一行添加應(yīng)用名稱(chēng)
6.模型ORM
ORM: O:Object實(shí)體類(lèi) R:relatinal關(guān)系型數(shù)據(jù)庫(kù)(mysql) M:mapping 也就是mysql有個(gè)表叫student 有id name列 那么在項(xiàng)目中應(yīng)該有個(gè)student類(lèi) 屬性有id name 就把這個(gè)數(shù)據(jù)庫(kù)到項(xiàng)目實(shí)體類(lèi)的映射關(guān)系稱(chēng)為orm
在pay應(yīng)用的models.py中新建實(shí)體類(lèi):
from django.db import models # Create your models here. class Teacher(models.Model): name = models.CharField(max_length=10) # 實(shí)體類(lèi)可以繼承Model class Student(models.Model): # 創(chuàng)建字段,字段類(lèi)型... name = models.CharField(max_length=10) # 外鍵指定學(xué)生的老師 teacher = models.ForeignKey(Teacher,on_delete=models.CASCADE)
on_delete=None, # 刪除關(guān)聯(lián)表中的數(shù)據(jù)時(shí),當(dāng)前表與其關(guān)聯(lián)的field的行為 on_delete=models.CASCADE, # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)也刪除 on_delete=models.DO_NOTHING, # 刪除關(guān)聯(lián)數(shù)據(jù),什么也不做 on_delete=models.PROTECT, # 刪除關(guān)聯(lián)數(shù)據(jù),引發(fā)錯(cuò)誤ProtectedError # models.ForeignKey('關(guān)聯(lián)表', on_delete=models.SET_NULL, blank=True, null=True) on_delete=models.SET_NULL, # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)的值設(shè)置為null(前提FK字段需要設(shè)置為可空,一對(duì)一同理) # models.ForeignKey('關(guān)聯(lián)表', on_delete=models.SET_DEFAULT, default='默認(rèn)值') on_delete=models.SET_DEFAULT, # 刪除關(guān)聯(lián)數(shù)據(jù),與之關(guān)聯(lián)的值設(shè)置為默認(rèn)值(前提FK字段需要設(shè)置默認(rèn)值,一對(duì)一同理) on_delete=models.SET, # 刪除關(guān)聯(lián)數(shù)據(jù), a. 與之關(guān)聯(lián)的值設(shè)置為指定值,設(shè)置:models.SET(值) b. 與之關(guān)聯(lián)的值設(shè)置為可執(zhí)行對(duì)象的返回值,設(shè)置:models.SET(可執(zhí)行對(duì)象)
類(lèi)型 | 說(shuō)明 |
---|---|
AutoField | 自動(dòng)增長(zhǎng)的IntegerField,通常不用指定,不指定時(shí)Django會(huì)自動(dòng)創(chuàng)建屬性名為id的自動(dòng)增長(zhǎng)屬性 |
BooleanField | 布爾字段,值為T(mén)rue或False |
NullBooleanField | 支持Null、True、False三種值 |
CharField | 字符串,參數(shù)max_length表示最大字符個(gè)數(shù) |
TextField | 大文本字段,一般超過(guò)4000個(gè)字符時(shí)使用 |
IntegerField | 整數(shù) |
DecimalField | 十進(jìn)制浮點(diǎn)數(shù), 參數(shù)max_digits表示總位數(shù), 參數(shù)decimal_places表示小數(shù)位數(shù) |
FloatField | 浮點(diǎn)數(shù) |
DateField | 日期, 參數(shù)auto_now表示每次保存對(duì)象時(shí),自動(dòng)設(shè)置該字段為當(dāng)前時(shí)間,用于"最后一次修改"的時(shí)間戳,它總是使用當(dāng)前日期,默認(rèn)為False; 參數(shù)auto_now_add表示當(dāng)對(duì)象第一次被創(chuàng)建時(shí)自動(dòng)設(shè)置當(dāng)前時(shí)間,用于創(chuàng)建的時(shí)間戳,它總是使用當(dāng)前日期,默認(rèn)為False; 參數(shù)auto_now_add和auto_now是相互排斥的,組合將會(huì)發(fā)生錯(cuò)誤 |
TimeField | 時(shí)間,參數(shù)同DateField |
DateTimeField | 日期時(shí)間,參數(shù)同DateField |
FileField | 上傳文件字段 |
ImageField | 繼承于FileField,對(duì)上傳的內(nèi)容進(jìn)行校驗(yàn),確保是有效的圖片 |
選項(xiàng) 說(shuō)明
null
如果為T(mén)rue,表示允許為空,默認(rèn)值是Falseblank
如果為T(mén)rue,則該字段允許為空白,默認(rèn)值是Falsedb_column
字段的名稱(chēng),如果未指定,則使用屬性的名稱(chēng)db_index
若值為T(mén)rue, 則在表中會(huì)為此字段創(chuàng)建索引,默認(rèn)值是Falsedefault
默認(rèn)primary_key
若為T(mén)rue,則該字段會(huì)成為模型的主鍵字段,默認(rèn)值是False,一般作為AutoField的選項(xiàng)使用unique
如果為T(mén)rue, 這個(gè)字段在表中必須有唯一值,默認(rèn)值是False
修改setting配置文件,找到如下代碼改為自己的mysql鏈接:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'junge', # 數(shù)據(jù)庫(kù)名字 需要在mysql創(chuàng)建對(duì)應(yīng)的庫(kù) 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': '3306', } }
鏈接mysql需要安裝mysqlclient,如下命令安裝
pip install mysqlclient -i https://pypi.douban.com/simple
模型遷移 (建表)
生成遷移文件:根據(jù)模型類(lèi)生成創(chuàng)建表的語(yǔ)句 python manage.py makemigrations tips:會(huì)在migrations下面生成0001_initial.py文件,里面有表的創(chuàng)建語(yǔ)句,00001也記錄了版本號(hào),記錄了每次對(duì)表的改變 執(zhí)行遷移:根據(jù)第一步生成的語(yǔ)句在數(shù)據(jù)庫(kù)中創(chuàng)建表 python manage.py migrate 執(zhí)行完畢就會(huì)在mysql中生成對(duì)應(yīng)的表
7.后臺(tái)管理系統(tǒng)(站點(diǎn)管理)
修改setting.py里面的,語(yǔ)言跟時(shí)區(qū)
LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' 修改為: LANGUAGE_CODE = 'zh-Hans' TIME_ZONE = 'Asia/Shanghai'
后臺(tái)管理系統(tǒng)需要賬號(hào)登錄,先創(chuàng)建用戶:
python manage.py createsuperuser 按照提示輸入用戶名密碼,郵箱隨便輸入 重置密碼python manager.py changepassword 用戶名
創(chuàng)建好了用戶啟動(dòng)項(xiàng)目,瀏覽器訪問(wèn)站點(diǎn):
python manage.py runserver 啟動(dòng)項(xiàng)目 登陸站點(diǎn) :http://127.0.0.1:8000/admin
想要我們創(chuàng)建的實(shí)體類(lèi)被站點(diǎn)管理,需要注冊(cè):
在admin.py中輸入
from django.contrib import admin from .models import Student, Teacher # Register your models here. admin.site.register(Student) admin.site.register(Teacher)
再次訪問(wèn):
相關(guān)文章
使用keras根據(jù)層名稱(chēng)來(lái)初始化網(wǎng)絡(luò)
這篇文章主要介紹了使用keras根據(jù)層名稱(chēng)來(lái)初始化網(wǎng)絡(luò),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05教你掌握分布式訓(xùn)練PyTorch?DDP到Accelerate到Trainer
這篇文章主要為大家介紹了教你掌握分布式訓(xùn)練PyTorch?DDP到Accelerate到Trainer2023-02-02python爬蟲(chóng)之驗(yàn)證碼篇3-滑動(dòng)驗(yàn)證碼識(shí)別技術(shù)
本篇涉及到的驗(yàn)證碼為滑動(dòng)驗(yàn)證碼,不同于極驗(yàn)證,本驗(yàn)證碼難度略低,需要的將滑塊拖動(dòng)到矩形區(qū)域右側(cè)即可完成。對(duì)python爬蟲(chóng)滑動(dòng)驗(yàn)證碼識(shí)別技術(shù)感興趣的朋友跟隨小編一起看看吧2019-04-04tensorflow卷積神經(jīng)Inception?V3網(wǎng)絡(luò)結(jié)構(gòu)代碼解析
這篇文章主要為大家介紹了卷積神經(jīng)Inception?V3網(wǎng)絡(luò)結(jié)構(gòu)代碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05淺談對(duì)pytroch中torch.autograd.backward的思考
這篇文章主要介紹了對(duì)pytroch中torch.autograd.backward的思考,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12使用PyTorch實(shí)現(xiàn)隨機(jī)搜索策略
這篇文章主要介紹了使用PyTorch實(shí)現(xiàn)隨機(jī)搜索策略,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07Python要求O(n)復(fù)雜度求無(wú)序列表中第K的大元素實(shí)例
這篇文章主要介紹了Python要求O(n)復(fù)雜度求無(wú)序列表中第K的大元素實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04