天天看點

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

 一.Django靜态檔案配置

啟動Django項目需知

  1.啟動Django項目必須確定一個端口号隻能有一個Django項目,否則很容易出現bug

  2.使用者可以通路的資源都在url中,也就是隻有url中開設的相關資源才能通路到(******)

如果通路不存在的資源,會報錯,但前端頁面會提示可以通路的url字尾

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

  3.在浏覽器中展示頁面時,有時修改了但是前端頁面并沒有展示,這時有可能是浏覽器自動通路了已經被緩存的部分,我們需要配置一個自動删除緩存功能

右鍵點選浏覽器的檢查

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查
Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

靜态檔案簡介

  在Django項目中,html檔案預設是全部放在templates檔案夾下,對于前段寫好了的檔案,我們隻是拿過來使用,這些檔案就可以稱之為"靜态檔案"

靜态檔案可以是:

  bootstrap一類的前段架構

  圖檔

  css樣式

  js代碼

這些靜态檔案預設是全部放在static檔案夾下(這個檔案夾沒有幫我們建,是以需要我們自己手動建立)

static檔案夾中我們預設需要建立的子檔案夾

  css檔案夾:存放目前網站所有的樣式檔案

  js檔案:目前網站所有的js檔案

  img檔案:目前網站所有的圖檔檔案

  其他(前段架構代碼:如bootstrap代碼等,第三方插件代碼)

如果我們沒有配置靜态檔案會

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

前端頁面的靜态檔案的導入

第一步:

  首先需要在配置檔案settings.py中進行配置(一般在配置檔案的末尾)

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')  # 真正的檔案夾路徑
    ]      
Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

配置完成後,使用者才可以根據路徑真正的使用靜态檔案夾中的檔案

第二步:

  導入前配置固定的靜态檔案格式

# 靜态檔案接口字首"動态解析"
{% 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方法初識

form表單post請求的實作

form表單的預設請求是get請求,get請求也能攜帶一些資料量較小的資料,攜帶的方式是在url後面:?+資料

http://127.0.0.1:8000/login/?username=zekai&password=123      
Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

這個?後面就是get請求攜帶的資料

當我們需要傳輸一些資料量較大或者比較隐私的資料如密碼時,我們需要用到post請求

我們可以通過将form表單的method方法修改為post請求

修改完成後還不能實作功能,我們還需要在settings.py配置檔案中注釋掉一個中間件

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',
]
      
Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

form表單送出資料目的地是由action決定的

  1.不寫的情況下,預設往目前位址送出

  2.寫字尾,往目前位址加字尾的位址送出

  3.寫全路徑,往全路徑的位址送出

request方法

request方法是在view.py視圖函數檔案中我們傳入的參數

request方法有很多參數,它是我們從前端頁面中擷取的資料

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

其中request.method是擷取請求方法

傳回值是兩種不同的請求方式(GET或者POST),大寫

判斷不同的請求方式來進行不同的邏輯操作

request.method擷取請求方法

對資料的處理 不單單隻有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')
      

當我們想取的是單個資料,比如使用者名,密碼等使用'get'方法

當我們想取的是多個資料,比如愛好等,使用'getlist'方法

在判斷完請求方式,書寫我們的後端邏輯時,推薦先處理get請求,即将post請求縮進填寫

視圖函數一般主要會先處理get請求
    def login(request):
        # 視圖函數針對不同的請求方式 應該有不同的處理邏輯
        # if request.method == 'GET':
        #     print('收到了')
        #     print(request.method)  # 能夠擷取前端請求方式 并且是全大寫的字元串
        #     print(type(request.method))
        #     return render(request,'login.html')
        # elif request.method == 'POST':
        #     # 擷取使用者輸入 做相應的邏輯判斷
        #     return HttpResponse("拿到了 老弟")
        if request.method == 'POST':
            return HttpResponse('來啦 寶貝')
        return render(request,'login.html')      

三.Django與資料庫的連接配接

pycharm連接配接mysql資料庫的操作

Django自帶的是sqlite資料庫,這個資料庫比較小,項目中一般使用的是mysql資料庫,這時候就要修改預設資料庫

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

在pycharm軟體中點選四周邊框縮進的database,點選mysql資料庫

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

然後下載下傳mysql的驅動,需要注意mysql資料庫的版本,區分自己的資料庫是8.x版本還是5.x版本,一定要裝對

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

配置完成後就可以在pycharm中進行mysql資料庫的操作

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

Django連接配接mysql資料庫的操作

django預設使用的是自帶的sqlite資料庫,如果想使用其他的資料庫,除了要在pycharm中配置外,還需要在settings.py配置檔案中配置

1.settings檔案中配置

1.settings檔案中配置
        DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'day51',
        'HOST':'127.0.0.1',
        'PORT':3306,
        'USER':'root',
        'PASSWORD':'123',
        'CHARSET':'utf8'
    }      

2.還要在項目名下的init檔案或者是應用名下的init檔案中告訴django不要使用預設的mysqldb連接配接mysql,而是使用pymysql,否則會報錯

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查
import pymysql
pymysql.install_as_MySQLdb()      

四.Django的orm簡介

django的orm也是對象關系映射

ORM對象關系映射
    表                      類
    一條條記錄                對象
    字段對應的值            對象的屬性
      

首先需要在應用下的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參數      

當書寫了模型類之後必須執行資料庫遷移(同步)指令(***************)

兩步操作:1.在指令行中輸入python3 manage.py makemigrations

     2.在指令行中繼續輸入python3 manage.py migrate

第一步僅僅是在migrations檔案夾中記錄了資料庫的修改,并不會直接操作資料

第二步才是真正的修改資料庫中的資料,真正的将類的操作同步到了資料庫

注意:隻要懂了models中任何和資料庫相關的代碼,就必須重新執行上述的兩條指令,缺一不可

執行了兩步代碼會建立一系列的檔案夾

Day52 Django基本配置以及增删改查操作 一.Django靜态檔案配置二.request方法初識三.Django與資料庫的連接配接四.Django的orm簡介五.字段的增删查改六.資料的增删查改七.使用者資料管理系統對資料的增删改查

這兩條指令有簡便方法,但是不推薦前期使用,先把基礎指令熟練了再使用簡便的

五.字段的增删查改

當建立表時建立的字段需要聲明字段名=字段類型(),預設值,是否為主鍵等可以不寫

在django orm中每張表都有主鍵字段,我們可以自己聲明,但如果不寫,django會預設給表建立一個名為id的主鍵字段

表字段的增

當一張表已經建立出來之後還想添加字段,我們可以直接在建立的類中添加具體的字段,但是設定字段的時候django會将讓我們對已存在的值做出選擇

針對這種情況,我們有兩種解決方法:

  1.給新增的字段設定預設值

addr = models.CharField(max_length=32,default='China')  # default該字段預設值      

  2.給新增的字段設定為:允許為空

age = models.IntegerField(null=True)  # 該字段允許為空      

新增完後需要執行資料庫遷移的兩步指令

表字段的改

修改字段的名字或者字段類型等,我們可以直接修改,修改完成後一定要執行資料庫遷移的兩步指令

表字段的删(慎用)

删除字段 直接在models.py中注釋該字段 然後重新執行兩條指令即可

注意:執行完之後 表中該字段所對應的所有的資料全部删除

并且一般情況下 基本是不會用到真正意義上的删除,因為删除字段對應的值也被删除了

六.資料的增删查改

資料的查

查指定的資料

# 1.查詢資料
# 1.1 get()
# user_obj = models.User.objects.get(username=username)  # select * from user where username='jason'
# """
# get方法 能夠直接拿到資料對象本身 但是 當查詢條件不存在的時候 會直接報錯  所有不推薦使用
# """
# print(user_obj)
# print(user_obj.username)
# print(user_obj.password)
# 1.2 filter()
# res = models.User.objects.filter(username=username,password=password)
"""
filter查詢出來的結果是一個"清單 清單内放的才是一個個的資料對象本身"
當查詢條件不存在的時候 不會報錯 隻會傳回一個空清單
filter括号内 支援寫多個參數  并且參數與參數之間是and的關系
"""
# print(res.query)  # 隻有querySet對象才可以直接點query檢視年内部對應的sql語句
# 1.filter拿到的結果就是一個querySet對象(你現在隻需要知道filter拿到的結果就能夠點query檢視sql語句)
"""
SELECT `app01_user`.`id`, `app01_user`.`username`, `app01_user`.`password` 
FROM `app01_user` 
WHERE (`app01_user`.`username` = jason AND `app01_user`.`password` = 123)

"""
# print(res)
# user_obj = res[0:2]
"""
querySet對象 你可以吧它當做清單操作 取值也可以通過索引取(querySet隻支援正數索引 不支援負數) 還支援切片操作(切出來的結果還是一個querySet對象)
但是不推薦你這麼做
"""
user_obj = models.User.objects.filter(username=username).first()  # 拿清單中第一個資料對象
"""
不推薦你使用索引取值 原因在于一旦沒有任何資料 再索引取值會報錯
但是如果用first雖然内部也是按照索引取值  但是沒有資料 也不會報錯 傳回的是None
"""      

查所有的資料

# 将user表中的資料全部查出
data = models.User.objects.all()  # select * from user
"""
拿到的也是一個querySet對象 
"""      

資料的增

# orm插入資料
# 1.create()
# res = models.User.objects.create(username=username,password=password)  # insert into user(username,password) values(username,password)
# """
# create方法能夠新增資料 并且有一個傳回值
# 傳回值就是新增的資料對象本身
# """
# print(res)
# print(res.username)
# print(res.password)
# 2.利用對象
user_obj = models.User(username=username,password=password)
user_obj.save()      

資料的删

# 根據使用者想要删除的資料的id值 取資料庫中删除資料
# 擷取到id值
delete_id = request.GET.get('id')
# 拿着id去資料庫中删除
models.User.objects.filter(id=delete_id).delete()  # delete from user where id = delete_id;      

資料的改

# 更新資料
# 方式1:
models.User.objects.filter(id=edit_id).update(username=username,password=password)
# sql語句:update user set username = username,password = password where id = edit_id
"""
filter拿到是一個清單   filter操作其實都是批量操作
如果filter結果清單中有多個資料 那麼會一次性全部修改 
類似于for循環一個個修改

"""
# 方式二(不推薦使用)
edit_obj.username = username
edit_obj.password = password
edit_obj.save()
"""
第二種方式會從頭到尾将所有的字段全部修改一遍  效率極低
"""      

七.使用者資料管理系統對資料的增删改查

基本流程

使用者的增删改查
    1.通過orm展示所有的到前端
        all()
        模闆文法for循環
    2.添加新增按鈕 (使用者的新增操作)
        a标簽的href直接觸發後端邏輯
        create()
    3.添加編輯 删除按鈕
        編輯
        删除
            利用get請求攜帶參數的特點  在url的後面跟上對應資料的id值
            request.GET.get()
            
            如果是編輯 
                重新渲染一個頁面 将編輯對象傳遞到前端
            
            如果是删除
                直接利用filter(...).delete()       

轉載于:https://www.cnblogs.com/sxchen/p/11531108.html