一、新建立的app必定要先去settings.py註冊css
簡寫:'app01'前端
完整:'app01.apps.App01Config'python
二、啓動Django項目的時候,必定要確保一個端口號只有一個Django項目佔用,否則的話,會容易形成bug(修改代碼後刷新頁面沒有效果)mysql
三、用戶能夠訪問的資源,都在url中,只有url中開設相關的資源你才能訪問到sql
四、後端資源通常都須要手動指定是否須要暴露給用戶數據庫
五、Django是默認支持自動重啓代碼嗎的,因此你只須要多刷新幾回頁面就能夠,可是有時候它的重啓機制比較慢,因此通常是手動重啓Djangodjango
重啓機制:實時監測文件代碼變化,只要有變化,就會自動重啓,可能你的代碼尚未寫完,這個時候就會自動報錯bootstrap
六、form表單默認是get請求,攜帶數據的方式是url/?name=xxx&pwd=xxx,http://127.0.0.1:8000/login/?username=zekai&password=123後端
能夠經過method改成post請求,改成post請求以後須要去settings文件中註釋掉一箇中間件session
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
form表單提交數據目的地有action控制:
1.不寫的狀況下,默認網當前地址提交
2.還能夠寫後綴/index/(經常使用)
3.還能夠寫全路徑
靜態文件:對於前段已經寫好了的文件,咱們只是拿過來使用,那麼這些文件均可以稱之爲叫"靜態文件",包括bootstrap一類的前段框架、圖片、css文件、js文件
靜態文件默認全都放在static文件夾下,static文件夾默認建立的子文件夾:css文件夾(當前網站全部的樣式文件),js文件夾(當前網站全部的js文件),img文件夾(當前網站全部的圖片文件),其餘(前段框架代碼,第三方插件代碼)
靜態文件配置:
STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] # 你只要輸入static文件夾內具體文件的路徑就可以訪問到 STATIC_URL = '/static/' # 這個static不是文件夾的名字 而是接口前綴 """只要你想訪問靜態文件中的資源 文件路徑就必須用static開頭""" # 手動將static文件夾中全部的資源暴露給用戶 STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), # 真正的文件夾路徑 os.path.join(BASE_DIR,'static1'), # 真正的文件夾路徑 os.path.join(BASE_DIR,'static2'), # 真正的文件夾路徑 os.path.join(BASE_DIR,'static3') # 真正的文件夾路徑 ] # 靜態文件接口前綴"動態解析" {% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}"> <script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script> # 利用解析器 動態獲取接口前綴
一、request.method能夠拿到當前請求方式,有了請求方式,就能夠分GET請求和POST請求寫不一樣的邏輯
二、對數據的處理,不僅僅只有wsgiref模塊,Django後端也進行了大量的數據處理
GET request.GET獲取前端get提交的數據(就相似因而一個大字典) 取值 request.GET.get('username') # 雖然value是一個列表 可是默認只取列表最後一個元素 # 強烈不建議你使用中括號的形式取值 # 若是想直接把列表所有取出(******) request.GET.getlist('hobby') POST request.POST獲取前端post提交的數據(就相似因而一個大字典) 取值 request.POST.get('username') # 雖然value是一個列表 可是默認只取列表最後一個元素 # 強烈不建議你使用中括號的形式取值 # 若是想直接把列表所有取出(******) request.POST.getlist('hobby')
一、Django默認使用的是自帶的sqlite數據庫,若是你想讓它使用其餘的數據庫,須要在settings配置文件中配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day51', 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'PASSWORD':'123', 'CHARSET':'utf8'} }
二、還要在項目名下的init文件或者應用名下的init文件中告訴Django不要使用默認的mysqldb鏈接MySQL,而是使用pymysql
import pymysql pymysql.install_as_MySQLdb()
首先須要在應用下的models.py中書寫模型類
class User(models.Model): # 將id字段設置爲User表主鍵字段 在django orm中 你能夠不寫主鍵字典 django會默認給你的表建立一個名爲id的主鍵字段 # id = models.AutoField(primary_key=True) # 一旦你本身指定了主鍵字段 那麼django就不會自動再幫你建立了 username = models.CharField(max_length=32) # username varchar(32) CharField必需要指定max_length參數 password = models.IntegerField() # password int
而後須要執行下面這兩條命令
# 數據庫遷移(同步)命令 python3 manage.py makemigrations # 僅僅是在小本本上(migrations文件夾)記錄數據庫的修改,並不會修改數據庫 python3 manage.py migrate # 將數據庫修改記錄真正同步到數據庫 # 簡寫 makemigrations migrate
注意:只要動了models中跟數據庫線管的代碼,就必須從新執行上面的兩條命令,缺一不可
增:當一張表已經建立出來後,後續還想添加字段,能夠有兩種方式
# 一、該新增的字段設置默認值 addr = models.CharField(max_length=32,default='China') # 二、給新增的字段設置成能夠爲空 age = models.IntegerField(null=True)
刪(慎用):刪除字段,直接在models.py中註釋該字段,而後從新執行兩條命令便可
注意:執行完以後,表中該字段所對應的全部的數據所有刪除,因此通常狀況下,是不會用到真正意義上的刪除
改:直接在模型類中修改,而後保存修改
# orm操做須要使用models中類的名字 from app01 import models # 數據的查 models.User.objects.all() #拿到全部的數據 models.User.onjects.get(username=username) # 直接拿到該對象,會報錯 res = models.User.objects.filter(username=username) # 拿到的是一個對象'列表',不會報錯 res.query # 拿到sql語句 user_obj = res.first() # 拿到第一個對象 # 數據的增 1.models.User.objects.create(username=username,password=password) 2.user_obj = models.User(username=username,password=password) user_obj.save() # 不推薦使用 # 數據的刪 models.User.objects.filter(條件).delete() # 數據的改 1.方式一:models.User.objects.filter(條件).update() username = request.POST.get('username') password = request.POST.get('passowrd') models.User.objects.filter(id=edit_id).update(username=username,password=password) # filter拿到的是一個列表,filter操做其實都是批量操做 # 若是filter結果列表中有多個數據,那麼會一次性所有修改。相似於for循環一個個修改 2.方式二:denit_obj.save()不推薦使用 edit_obj.username=username edit_obj.password=password edit_obj.save() # 第二種方式會從頭至尾將全部的字段所有修改一遍,效率極低
1.經過orm展現全部的數據到前段 all() 模板語法for循環 2.添加新增按鈕(用戶的新增操做) a標籤的href直接觸發後端邏輯 3.添加編輯 刪除按鈕 利用get請求攜帶參數的特色,在url的後面跟上對應數據的id值 request.GET.get() 若是是編輯,從新渲染一個頁面,將編輯對象傳遞到前端 若是是刪除,直接利用filter().delete()