django小白必會

Formerly0^0發表於2024-03-28

Django基礎

1.Django小白必會三板斧

1.1 HttpResponse 返回純文字或者JSON資料

from django.shortcuts import render, HttpResponse


def index(request):
    print(request)
    # HttpResponse :返回純文字或者JSON資料
    return HttpResponse("ok")

1.2 render 渲染前端頁面

from django.shortcuts import render, HttpResponse


# django 三板斧
def index(request):
    print(request)

    # render渲染前端頁面的
    # request 當前request物件
    # template_name:當前app下面有一個templates資料夾
    return render(request, "index.html")

1.3 redirect 重定向

def index(request):
    print(request)
    # redirect 重定向
    return redirect("/home/")
  
def home(request):
    return render(request, "index.html")

2.靜態檔案

2.1 模版檔案

  • html檔案

2.2 資原始檔

  • 儲存在本地的js檔案,css檔案,圖片,影片,音訊等
  • 一般情況下我們會對靜態檔案進行劃分
# jQuery...js檔案 ---> js資料夾
# bootstrap ---> plugins 外掛
# css檔案 ---> css資料夾
# 頭像 ---> avatar 資料夾

# static 

2.3 在Django中配置靜態檔案

  • 在settings.py檔案中
# 預設的靜態檔案配置
STATIC_URL = '/static/'
  • 在app 下建立一個static資料夾
    • 建立一個子分類資料夾
  • 訪問靜態檔案http://127.0.0.1:8000/static/avatar/1.jpg
  • 在頁面上可以渲染出當前靜態檔案

2.4 在專案目錄下的靜態檔案訪問不到

# 在Django的預設靜態文渲染系統中
# 預設的檔案訪問位置為當前APP下的靜態檔案

# 如果想訪問到專案目錄下指定資料夾內容的靜態檔案,需要額外新增配置


# 靜態檔案配置
# 預設查詢位置是當前APP的目錄下
# 這個配置定義了靜態檔案應用在啟用 FileSystemFinder 查詢器時將穿越的額外位置
STATICFILES_DIRS  = [
    # img :當前專案下的靜態資料夾的名字,並且也是路由中的地址字首
    os.path.join(BASE_DIR, 'img')
]

2.5 在前端中使用靜態檔案

# 第一步
# 在前端頁面中的第一行  
# {% load static  %}

# 第二步:使用靜態檔案
# {% static 'avatar/1.jpg' %}
{% load static  %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>當前是index頁面</h1>
<img src="{% static 'avatar/1.jpg' %}" alt="">
</body>
</html>

3. request物件

3.1 request.method 獲取請求方式

def register(request):
    # request.methid
    print(request.method)

3.2 request.GET 獲取到get請求攜帶的請求引數

http://localhost:8000/register/?username=111&password=111&hobby=music&hobby=sport&hobby=game
  • request.GET.get(key)
# 獲取獲取鍵值對資料(單個的鍵值對資料),多個資料的話,只能獲取到最後一個
data = request.GET
        print(data)  # <QueryDict: {'username': ['serein'], 'password': ['123'], 'hobby': ['music', 'sport']}>
        username = data.get('username')
        print(username)
  • request.GET.getlist(ke
# 獲取GET請求攜帶的列表資料(一個鍵多個值的資料)
data = request.GET
        print(data)  # <QueryDict: {'username': ['serein'], 'password': ['123'], 'hobby': ['music', 'sport']}>
        hobbylist = data.getlist("hobby")
        print(hobbylist) 

3.3 request.POST 獲取POST請求攜帶的請求體

POST
<QueryDict: {'username': ['serein'], 'password': ['123'], 'hobby': ['sport', 'game']}>


        data = request.POST
        print(data)
        username = data.get('username')
        hobbylist = data.getlist("hobby")

4. Django連線資料庫

4.1 Django自帶一個資料

  • 自帶一個資料庫sqlite3
# 在settings.py檔案中

# 資料庫的配置項
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

4.2 Django連線MySQL資料庫

4.2.1 配置mysql引數
# MySQL配置項
DATABASES = {
    'default': {
        # ENGINE :預設的引擎 mysql
        'ENGINE': 'django.db.backends.mysql',
        # HOST : 主機地址127.0.0.1 / localhost
        "HOST": "127.0.0.1",
        # PORT : mysql 的服務埠
        "PORT": 3306,
        # USER : 使用者名稱
        "USER": "root",
        # PASSWORD : 資料庫密碼
        "PASSWORD": "123456",
        # NAME  : 資料庫名字
        "NAME":"django_02",
        # CHARSET : 預設編碼集
        "CHARSET": "utf8mb4"
    }
}
4.2.2 啟動Django報錯
  • Did you install mysqlclient?

4.3 啟動mysql報錯

4.3.1 解決辦法一
  • 猴子補丁
  • 可以放在任意位置的 __init__.py檔案中
import pymysql

pymysql.install_as_MySQLdb()
4.3.2 下載第三方模組
  • 3.x版本以後建議你使用 mysqlclient
pip install mysqlclient
  • 運氣
    • win 電腦給力一點,安裝就不會報錯
  • mac系統安裝 mysqlclient 費勁
4.3.3 win報錯解決辦法
  • 訪問 whl檔案的官網
  • https://pypi.org/project/mysqlclient/#files
pip install mysqlclient-2.2.4-cp310-cp310-win_amd64.whl

5.Django中的orm框架

5.1 什麼是ORM

  • ORM是一種將物件與關係型資料庫之間的對映的技術,主要實現了以下三個方面的功能:
    • 資料庫中的表對映為Python中的類
    • 資料庫中的欄位對映為Python中的屬性
    • 資料庫中的記錄對映為Python中的例項
  • ORM的主要優點是可以減少開發人員編寫重複的SQL語句的時間和工作量,並且可以減少由於SQL語句的調整和更改所帶來的錯誤。

5.2 DjangoORM框架的優點

  • 與其他ORM框架相比,Django ORM擁有以下優點:
  • 簡單易用:Django ORM的API非常簡單,易於掌握和使用。
  • 豐富的API:Django ORM提供了豐富的API來完成常見的資料庫操作,如增刪改查等,同時也支援高階查詢和聚合查詢等操作。
  • 具有良好的擴充套件性:Django ORM可以與其他第三方庫進行無縫整合,如Django REST framework、Django-Oscar等。
  • 自動對映:Django ORM支援自動對映,開發者只需要定義資料庫表的結構,就可以自動生成相應的Python類,從而減少開發過程中的重複程式碼量。

5.3 ORM之建表操作

5.3.1 建立模型表
class User(models.Model):
    # 資料庫中的欄位對映未puthon的屬性
    # 定義一個使用者名稱,字串型別,長度
    # mysql 字串型別,varchar char
    # CharField字串型別,max_length最大長度,verbose_name註釋
    username = models.CharField(max_length=32, verbose_name="使用者名稱")
    password = models.CharField(max_length=32, verbose_name="密碼")
    # IntegerField相當於mysql的int欄位
    age = models.IntegerField(verbose_name="年齡")
    # FloatField相當於mysql的float欄位
    salary = models.FloatField(verbose_name="薪資")
5.3.2 遷移檔案
  • 生成遷移檔案
# 命令列
python manage.py makemigrations
chenxu@chenxudeMacBook-Pro new_djangoProject % python3.10 manage.py makemigrations

Migrations for 'app01':
  app01/migrations/0001_initial.py
    - Create model User
  • 遷移檔案生效
# 遷移記錄生效
python manage.py migrate

相關文章