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 模版檔案
2.2 資原始檔
- 儲存在本地的js檔案,css檔案,圖片,影片,音訊等
- 一般情況下我們會對靜態檔案進行劃分
# jQuery...js檔案 ---> js資料夾
# bootstrap ---> plugins 外掛
# css檔案 ---> css資料夾
# 頭像 ---> avatar 資料夾
# static
2.3 在Django中配置靜態檔案
# 預設的靜態檔案配置
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
# 獲取獲取鍵值對資料(單個的鍵值對資料),多個資料的話,只能獲取到最後一個
data = request.GET
print(data) # <QueryDict: {'username': ['serein'], 'password': ['123'], 'hobby': ['music', 'sport']}>
username = data.get('username')
print(username)
# 獲取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自帶一個資料
# 在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 下載第三方模組
pip install mysqlclient
- 運氣
- 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