本節知識點大體爲:靜態文件配置、form表單提交數據後端如何獲取、request方法、pycharm鏈接數據庫,django使用mysql數據庫、表字段的增刪改查、表數據的增刪改查css
1、建立app,建立以後必定要先去settings.py註冊html
2、靜態文件配置前端
html文件默認所有放在templates文件夾下python
一、對於前段已經寫好了的文件 咱們只是拿過來使用 那麼這些文件均可以稱之爲叫"靜態文件"。mysql
靜態文件能夠是:sql
1.bootstrap一類的前端框架,已經寫好了的 2.圖片 3.css,js數據庫
靜態文件默認全都放在static文件夾下django
static文件夾中默認會默認建立的子文件夾
css文件夾 當前網站全部的樣式文件
js文件 當前網站全部的js文件
img文件 當前網站全部的圖片文件
其餘(前端框架代碼 第三方插件代碼...)bootstrap
用戶能夠訪問的資源都在url中,只有url中開設相關的資源你才能訪問到(******)後端
二、在settings.py文件中
STATIC_URL = '/static/' 這個static不是文件夾的名字 而是接口前綴
只要你想訪問靜態文件中的資源 文件路徑就必須用static開頭(在html頁面中head標籤中導入css,js樣式路徑都要以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') # 真正的文件夾路徑
]
三、靜態文件接口前綴"動態解析" (html頁面css,js導入) 防止須要重複更改導入靜態文件路徑
{% 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>
利用解析器 動態獲取接口前綴
3、form表單提交數據
一、表單提交方式
form表單默認是get請求,攜帶數據的方式是url問好後跟數據,這種方式數據不安全。
http://127.0.0.1:8000/login/?username=zekai&password=123
能夠經過method改成post請求,改成post請求後,須要去settings文件中註釋掉一箇中間件
form表單提交數據目的地action:(三種提交地址方式)
1.不寫的狀況下 默認往當前地址提交
2.還能夠寫後綴/index/(講項目經常使用這種)
3.還能夠寫全路徑
二、視圖函數針對不一樣的請求方式,有不一樣的處理邏輯
request.method能夠獲得表單請求的兩種方式
1.視圖函數通常主要會先處理get請求,把頁面渲染出來,get獲取的數據也是一個大字典 (get請求方式也能獲取到前端提交的數據)
2.post請求就是頁面表單提交的數據,能夠把它當成一個大字典
request.POST數據格式
三、獲取表單傳遞的具體數據
好比傳遞的username和password值,有兩種方式
第一種方式: username = request.POST.get('username') #默認只取列表最後一個元素,因此取出來的數據是字符串(用兩個name同樣input舉例) 第二種方式: password = request.POST['password'] #不建議這種方式取值,取不到值就會報錯
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')
4、pycharm鏈接數據庫
5、django使用mysql數據庫
1.django默認使用的是自帶的sqlite數據庫,若是你想讓它其餘的數據庫 須要在settings配置文件中配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day51', 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'PASSWORD':'root', } }
2.還要在項目名下的init文件或者是應用名下的init文件中告訴django不要使用默認的mysqldb鏈接mysql,而是使用pymysql
import pymysql pymysql.install_as_MySQLdb()
前面這些操做鏈接上數據庫,下面咱們用django orm對錶進行操做
ORM對象關係映射
表 類
一條條記錄 對象
字段對應的值 對象的屬性
3.首先須要在應用下的models.py中書寫模型類(建立數據庫)
建立User類
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
注意:你在models.py寫了這個類,在數據庫中尚未生成表,還須要在Terminal執行下面這兩句命令。
python3 manage.py makemigrations # 僅僅是在小本本上(migrations文件夾)記錄數據庫的修改 並不會直接操做數據 python3 manage.py migrate # 將數據庫修改記錄 真正同步到數據庫
只要是動了models中跟數據庫相關的代碼,就必需要從新執行上面的兩條命令,缺一不可(******)
還有一種簡單的方法執行那兩條命令:
點擊Tools >>Run manage.py Task>>
執行這兩句代碼
應用名+類名就是建立的數據庫名字
6、表字段的增刪改查 (修改了以後都要執行上面的兩句命令)
增
當一張表已經建立出來以後 後續還想添加字段,能夠有兩種方式 1.給新增的字段設置默認值 addr = models.CharField(max_length=32,default='China') # default該字段默認值 2.給新增的字段設置成能夠爲空 age = models.IntegerField(null=True) # 該字段容許爲空
改
就是改字段的結構,字節大小,修改完以後也要記得運行那兩句命令行
刪(慎用)
刪除字段 直接在models.py中註釋該字段 而後從新執行兩條命令便可
注意:執行完以後 表中該字段所對應的全部的數據所有刪除,而且通常狀況下 基本是不會用到真正意義上的刪除
7、表數據的增刪改查
1.數據的查(有兩種查get/filter)
第一種:
models.User.objects.get(username=username) 若是username不存在的時候會報錯
第二種:(建議用第二種)
res = models.User.objects.filter(username=username)
user_obj = res.first() 經過first()獲取第一個對象,不推薦使用索引取值,緣由在於一旦沒有數據,再索引取值會報錯(支持正數索引,不支持負數索引),還支持切片操做(也是正數切片)。雖然first內部也是按照索引取值,但沒有數據,不會報錯,是返回None
filter查詢出來的結果(Queryset)是一個列表 "列表內放的是一個個數據對象";當查詢條件不存在的時候,不會報錯,只會返回一個空列表;filter括號內支持寫多個參數,而且參數與參數之間是and的關係。
res.query 只有querySet對象才能經過點query查看sql語句
第三種:查全部
models.User.objects.all() #拿到的也是queryset對象
models.User.objects.get(username=username) res = models.User.objects.filter(username=username) user_obj = res.first() #拿到列表中第一個數據對象 user_obj.username #獲取查詢到的user_obj的username值
models.User.objects.all() #查詢全部數據
2.數據的增(兩種方式)
1.create() models.User.objects.create(username=username,password=password) #返回值就是新增的數據對象自己 insert into user(username,password) values(username,password) 2. 利用對象 user_obj = models.User(username=username,password=password) user_obj.save()
3.數據的刪
models.User.objects.filter(條件).delete()
真實案例:點擊刪除按鈕刪除本行
前端頁面刪除按鈕綁定: href='/del_user/?id={{user.id}}'
views.py: 經過get請求request.GET.get('id')獲取綁定的user_id值,而後經過user_id查詢models.User.objects.filter(id=user_id).delete刪除選中的用戶
4.數據的改
方式一:
models.User.objects.filter(條件).update(username=username,password=password)
filter拿到是一個列表,filter操做其實都是批量操做。若是filter結果列表中有多個數據,那麼會一次性所有修改,相似於for循環一個個修改。
方式二:對象的方式(不推薦使用),這種方式會從頭至尾將全部的字段所有修改一遍,效率極低
obj.username=username
obj.password=password
obj.save()