網站所使用的提早已經寫好的文件,如:js,css,第三方組件bootstrap、fontawesome、sweetalter等等css
html
針對所用到的靜態文件放在static文件夾中,需手動建立前端
一、在settings配置文件中配置python
STATIC_URL = '/static/' # 此處是訪問靜態資源的前綴,默認狀況下接口前綴名與靜態文件名保持一致 STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), os.path.join(BASE_DIR, 'static1'), ] # 此處的static是文件夾路徑,當訪問時,若是前綴相同,會從這個路徑下依次查找資源,都沒有會報錯
二、解決動態綁定問題mysql
在配置文件中STATIC_URL改變static名使前端的HTML代碼都不會改,在templates文件夾下全部HTML文件中動態引入綁定git
{% 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>
三、form表單中提交方式,默認是get請求,會自動將所請求的數據加在url後sql
http://127.0.0.1:8000/login/?username=admin&password=123
指定爲 method='post' 請求就不會在url後有請求的數據,而且全部的input標籤都要寫name屬性,不然後端接收不到所輸入的內容數據庫
action屬性django
一、不寫 默認朝當前地址提交數據bootstrap
二、全路徑
三、後綴(/login)
當發送post請求時,須要先配置文件中註釋掉一行
視圖函數應該作到針對不一樣的請求來作出不一樣的邏輯處理,好比GET請求應該返回一個HTML文件,POST請求應該獲取用戶提交的數據而後作一系列邏輯處理,因此咱們須要判斷請求方式是啥
request對象,用來獲取前端的請求方式
request.method # 結果是GET或POST request.POST # 獲取post請求提交的數據 結果相似於一個大字典,字典的value是列表套字符串 request.POST.get('username') # 只取列表中的最後一個元素,字符串 request.POST.getlist('username') # 獲取整個列表 request.GET # 獲取get請求url後攜帶的數據 結果相似於一個大字典,字典的value是列表套字符串 request.GET.get('username') # 只取列表中的最後一個元素 request.GET.getlist('username') # 獲取整個列表
注意:POST請求,便可以經過request.PSOT獲取數據,也能夠經過request.GET獲取攜帶的數據
一般狀況下針對不一樣的請求應該作不一樣的判斷,可是get請求次數要遠大於post請求,因此咱們應該對不是get請求的作判斷,對get請求不作判斷,減小代碼層次結構
def login(request): if request.method == 'POST': return HttpResponse('登陸請求收到') return render(request, 'login.html')
鏈接數據庫後能夠對數據庫中數據查看與修改數據
須要本身手動先建立庫,Django支持MySQL5.5及以上版本
一、先去配置文件中配置相關的參數
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 數據庫類別 'NAME': 'dome1', # 庫名 'HOST': '127.0.0.1', 'POST': 3306, 'USER': 'root', 'PASSWORD': '2694', 'CHARSET': 'utf8' } }
二、在項目名或者應用名下面的__ init__文件中告訴Django使用pymysql鏈接數據庫而不是默認的自帶mysqldb
import pymysql pymysql.install_as_MySQLdb()
Django的ORM不會幫你建立庫只能幫你建立表
ORM的做用:可以讓一個不會數據數據庫的也可以經過Python的面向對象方法,經過句點符來簡單快捷的操做數據
ORM對象關係映射:
類 <<===>> 表
對象 <<===>> 記錄
屬性 <<===>> 字段值
一、先去models.py文件中寫模型類
class User(models.Model): # id能夠不建立,Django ORM會自動建立一個名爲id的主鍵字段,若是本身建立了主鍵就不會自動建立 # id int primary key auto_increment id = models.AutoField(primary_key=True) username = models.CharField(max_length=64) # 此處的char其實數據庫中的是varchar,且必須提供max_length password = models.CharField(max_length=32) email = models.EmailField(default='1321241@qq.com') # 此處的EmailField在數據庫中是varchar(254) # price爲小數字段 總共8位小數位佔2位 price = models.DecimalField(max_digits=8,decimal_places=2)
二、每一次從models類中對數據庫進行改變操做都要進行:數據庫遷移命令,兩條命令永遠成對出現,只要動了models.py對數據庫進行操做,就必需要執行數據庫遷移命令
一、將數據庫的改動記錄到(migrations文件夾)中
- python manage.py makemigrations
二、將真正的改動同步到數據庫中
- python manage.py migrate
兩種方式:
一、要麼給字段設置默認值
二、運行該字段爲空
email = models.EmailField(default='1321241@qq.com') # 設置默認值 hobby = models.CharField(null=True, max_length=(64)) # 設置以前設置的字段默認爲空
在models中註釋掉對應的字段,執行數據庫遷移命令便可
修改models中對應的代碼,執行數據庫遷移命令便可
兩種方式:
一、create()
# 方式一:經過create方法添加數據 user_obj = models.User.objects.create(username=username, password=password)
二、對象的綁定方法
先生成一個user對象
調用對象的綁定方法
# 方式二:先生成一個user對象,再調用對象的綁定方法 user_obj = models.User(username=username, password=password) user_obj.save()
一、查單條和多條指定的數據
filter()
from app01 import models # 至關於SQL語句的select * from user where username='Mr沈' res = models.User.objects.filter(username='Mr沈') # 返回是一個列表套對象,且對象不存在時,不會報錯,返回空列表 user_obj = res.first() # 支持索引取值不支持負索引,可是不建議使用,推薦使用first方法
filter()方法內能夠放多個關鍵字參數, 而且多個關鍵字參數之間是and關係
res = models.User.objects.filter(username='Mr沈', password='123') # 至關於SQL語句的select * from User where username='Mr沈' and password='123'
二、查找全部
一、filter() 括號中不聽任何參數就是查全部
res = models.User.objects.filter()
二、all() 查詢全部的數據
res = models.User.objects.all()
先根據filter過濾出須要刪除的數據所有,再用delete() 方法刪除
models.User.objects.filter(id=delete_id).delete()
一、用戶如何獲取須要修改的數據id,能夠經過讓前端get請求中攜帶數據id來獲取
<a href="/edit_user/?edit_id={{ user_obj.id }}">編輯</a>
二、根據數據id對數據進行批量修改,兩種方式:
一、方式1:update() 推薦使用
models.User.objects.filter(id=edit_id).update(name=username,password=password)
二、方式2:不推薦使用,由於會將數據庫全部的數據從新寫一遍,效率很慢
# 方式2(瞭解) # 1 先獲取數據對象 edit_obj = models.User.objects.filter(id=edit_id).first() # 2 再修改對象屬性 edit_obj.name = username edit_obj.password = password # 3 調用對象的綁定方法保存 edit_obj.save()
表關係有:一對一,一對多,多對多
在書寫表關係的時候,要先把基表在models中所有寫出來,以後再考慮外鍵字段,最後要執行數據庫遷移命令
圖書表與出版社表:是一對多的外鍵關鍵關係,外鍵字段應該創建在多的那一方,ForeignKey(to= '')
# 書籍與出版社 是一對多外鍵關係 publish = models.ForeignKey(to='Publish') # 默認關聯字段就是出版社表的主鍵字段 # publish = models.ForeignKey(to=Publish) # to後面也能夠直接寫表的變量名 可是須要保證該變量名在當前位置的上方出現
圖書表與做者表:是多對多的外鍵關係,外鍵字段創建在哪張表上都行,外鍵字段推薦創建在查詢頻率較高的那張表中,爲了方便後面基於ORM查詢, ManyToManyField(to= '')
# 書籍與做者 是多對多外鍵關係 authors = models.ManyToManyField(to='Author') # 書籍和做者是多對多關係 """ authors字段是一個虛擬字段 不會真正的在表中建立出來 只是用來告訴django orm 須要建立書籍和做者的第三張關係表 """
做者表與做者詳情表:是一對一的外鍵關係,外鍵字段創建在哪張表上都行,推薦創建在查詢頻率較高的那張表中,爲了方便後面基於ORM查詢, OneToOneField(to= '')
# 一對一外鍵關係創建 author_detail = models.OneToOneField(to='AuthorDetail')
注意:ForeignKey字段和OneToOneFiled字段在建立表時無論用戶有沒有加_ id後綴都會自動在該字段名後加_id
建立多對多表時,會自動建立第三張中間表