一柴我、Django(1.11.9)連接MySQL
1、如果項目使用sqlite驼仪,不需要額外配置,直接操作即可袜漩。
2绪爸、Django默認情況連接MySQL用的驅動是mysqldb模塊,python3.x以后用的都是pymysql宙攻。
3奠货、使用MySQL,需要配置如下:
- 配置文件中:settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'day62',
'HOST': '127.0.0.1',
'PORT': 3306,
'USER': 'root',
'PASSWORD':'123'
}
}
- 在app文件夾中的__init__.py文件夾中寫入:
import pymysql
pymysql.install_as_MySQLdb()
- 首先手動創(chuàng)建一個數(shù)據(jù)庫座掘,在models.py中新建類递惋,寫字段
執(zhí)行python3 manage.py makemigrations
和python3 manage.py migrate
即可在已經(jīng)創(chuàng)建的數(shù)據(jù)庫中添加相應的表柔滔。
二、路由層的簡單路由配置
1萍虽、路由參數(shù)
- 第一個參數(shù)是正則表達式
- 第二個參數(shù)是視圖函數(shù)內(nèi)存地址
- 第三個參數(shù)是一個字典睛廊,{"name":"xiaoming","age":18},給視圖函數(shù)傳遞默認值
- 第四個參數(shù)name杉编,是當前路由的別名超全,用于反向解析
注意點:
1、訪問根路徑王财,如何配置路由
url(r'^$',視圖函數(shù)內(nèi)存地址)
2卵迂、在路由中配置多個相同路由只會執(zhí)行第一個
3、當兩個路由為
url(r'^login', views.home),
url(r'^login2', views.home),
時绒净,永遠不會匹配到第二個
2见咒、路由層的APPEND_SLASH
當url配置中正則部分最后沒加上/時,Django會通過django.middleware.common.CommonMiddleware
這個中間件自動補齊挂疆,如在訪問http://127.0.0.1:8000/login這個地址時改览,瀏覽器會發(fā)兩次請求,重定向一次缤言,而在settings.py中加上APPEND_SLASH=False
時宝当,會去除這種特性。
三胆萧、無名分組和有名分組
1庆揩、無名分組,把分組分出來的值跌穗,當作位置參數(shù)傳遞給視圖函數(shù)
url(r'^login/([0-9]{4})/([0-9{2}])',view.login),
2订晌、有名分組,把分組出來的值蚌吸,當作關鍵字參數(shù)傳遞給視圖函數(shù)
url分組的作用:可以從url中解析出參數(shù)锈拨,傳遞給視圖函數(shù)使用
四、路由分發(fā)
1羹唠、有一個總路徑奕枢,根路由,總路由負責做分發(fā)
2佩微、每個app有自己的路由和視圖函數(shù)的對應關系
3缝彬、使用:
- 在根路由中配置
url(r'^app01/',include('app01.urls')),
- 在不同app中新建urls.py
urlpatterns = [
url(r'login/',views.login),
url(r'home/',views.home),
]
- http://127.0.0.1:8000/app01/login/ 先匹配app01,如果成功分發(fā)到app01的urls中繼續(xù)匹配
五哺眯、反向解析和名稱空間
1跌造、反向解析
- 通過路由的別名,解析出路由的地址
- 用在視圖函數(shù)中:
url = reverse('home') # home就是路由的別名
- 模版文件中使用
{% url 'bieming' %}
- 作用:動態(tài)根據(jù)別名獲得路徑,一旦路徑改變壳贪,不需要改其他代碼
2、名稱空間
路由做反向解析時寝杖,有同名路由违施,出現(xiàn)問題
在做路由分發(fā)時,給每個app的路徑設置一個名稱空間
使用步驟
1 在總路由中設置
url(r'^app01',include('app01.urls','名稱空間的名字') ),
2 用在視圖函數(shù)中:
url=reverse('名稱空間的名字:home') # home就是路由的別名
print(url)
3 模板文件中使用
{% url '名稱空間的名字:meinv' %}