Django第二篇

django第二篇

1.靜態文件配置

接口前綴:

​ STATIC_URL = '/static/'html

跟靜態文件夾的名字沒有關係,默認狀況下這個前綴跟靜態文件夾名字同樣python

文件配置

STATICFILES_DIRS = [mysql

​ os.path.join(BASE_DIR,'static')sql

]數據庫

'static':就是你的靜態文件夾路徑,能夠設置多個,會依次查找列表中全部的靜態文件路勁,找到就中止,都沒有的話返回404(資源不存在)django

2.form表單操做

form表單觸發提交數據的動做兩種方式:

<input type='submit'>

<button></button>

form表單提交數據地址的指定及方式:

​ action屬性控制提交的地址post

方式一:全路徑3d

<form action='http://127.0.0.1:8000/login/'>

方式二:只寫路勁後綴code

<form action='/login/'>

方式三:不寫(默認往當前路勁提交)orm

注意:利用a標籤href屬性能夠指定頁面跳轉的路勁,href能夠寫全路勁,可是推薦寫後綴便可

<a href='/login/' class='btn btn-success'>登入</a>

兩種請求方式(form表單默認是get請求)

#根據客戶端請求方式的不一樣執行不一樣的邏輯代碼
def login(request):
    #獲取客戶端的請求方式
    print(request.method) #注意是全大寫的字符串
    if request.method == 'POST':
        return HttpResponse('ok')
    return render(request,'login.html')

獲取請求方式中攜帶的參數

def login(request):
    if request.method == 'POST':
        print(request.POST)  #裏面存放了客戶端post提交的全部數據,能夠當作是一個大字典,{'username':['lucas'],'password':['123']}
        print(request.POST.get('username')) #value雖然是一個列表,可是獲取值得時候拿到的是單個元素,默認只會取列表裏的最後一個元素
        print(requet.POST.getlist('username'))  #一次性獲取value列表裏的全部數據,應用場景能夠是用戶的愛好,多選框   

#get請求的取值方式和post同樣

3.django鏈接數據庫

修改配置文件

DATABASES = {
    'default':{
        'ENGINE':'django.db.backends.mysql',
        'NAME':'day54', #庫名
        'HOST':'127.0.0.1',
        'POST':3306,
        'USER':'root',
        'PASSWORD':'123'
    }
}
#注意:鍵必須是大寫

替換

​ 告訴Django用pymysql替換它,默認mysqldb模塊鏈接數據庫

​ 方式一:在項目文件夾下面的__init__.py

​ 方拾二:在應用文件夾下的__init__.py

#固定寫法
import pymysql
pymysql.install_as_Mysql()

4.orm簡單操做

orm簡介

​ orm:對象關係映射,簡單來講就是類對應數據庫中的一張表,類對象對應表記錄,對象的屬性對應某條記錄的值

​ django的orm不能自動建立庫,可是能夠自動建立表

​ 小提示:一個django項目就使用一個庫,不要多個django項目使用一個庫

數據庫遷移(同步)命令

​ 在models建立好類以後,還須要兩個命令:

​ python3(當前所用解釋器名稱) manage.py makemigrations:將數據庫變更記錄到文件中

​ python3 manage.py migrate:將數據庫變更同步到數據庫中

5.操做數據庫

User表插入數據

方式一:

user_obj = models.User.objects.create(name=username,password=password)
#create方法有一個返回值,就是當前新增的數據對象自己

方式二:

user_obj = models.User(name=password,password=password)
user_obj.save()

查詢數據

獲取User表全部的數據
user_list = models.User.objects.all() #獲取user表全部的數據

上圖中的user_list是QuerySet對象,能夠經過點query查看獲取sql語句,QuerySet對象支持索引取值,可是不推薦,推薦使用自帶的.first()來獲取第一條數據

獲取單個值
user_query = models.User.objects.filter(id=1)  # queryset對象
user_obj = user_query.first()  # 數據對象
# 當條件不存在的狀況下會返回一個空的queryset對象,推薦使用
user_obj = models.User.objects.get(id=1)  # 用get能夠直接獲取到數據對象自己,可是查詢條件不存在的狀況下直接報錯,全部推薦使用filter

刪除數據

models.User.objects.filter(id=1).delete()  # 會將queryset全部的數據對象所有刪除

修改數據

方式一:

models.User.objects.filter(id=edit_id).update(name=username,password=password)
#調用queryset封裝的方法,該方法是一個批量操做,會將queryset內全部的數據對象所有修改

方式二:

user_obj = models.User.objects.filter(id=edit_id).first()
user_obj.name = username
user_obj.password = password
user_obj.save()
上述edit_id獲取方式:

方式一:利用input隱藏一個標籤

<input type='hidden' name='edit_id' values='{{user_obj.pk}}'>  #django中pk默認取的是主鍵字段,User表中id就是主鍵字段

方式二:GET請求攜帶

<form action='/edit/?edit_id={{user_obj.pk}}' method='post'>
    
</form>

上述修改、刪除都是經過queryset對象點的方法完成的,會做用於內部全部的數據對象,相似於批量操做

注意:修改模型層裏面的根表相關的全部的數據以後,必須從新執行數據庫遷移命令

6.django請求生命週期

相關文章
相關標籤/搜索