官方文檔:https://docs.djangoproject.com/zh-hans/3.0/
注意:Python Web的基礎服務架構有兩大分支,WSGI和ASGI。目前來看,所以的Web架構都支持WSGI,對於Django而言,2.x版本沒有ASGI, 3.X有ASGI.(網關接口是用於Web應用與Web服務器進行通訊。其中WSGI、ASGI是專為python設計的網關接口。uwsgi是uWSGI服務器自有的傳輸協議 .)
拓展:
Web服務器網關接口(Python Web Server Gateway Interface),縮寫為WSGI,它是一種專為python定義的接口規范,用於web服務端和web應用(框架)之間的連接通俗的理解,WSGI也是一種規范協議,
異步網關接口(Asynchronous Server Gateway Interface),是WSGI的擴展版本,旨在為Python Web服務、框架和應用之間提供一個標准的異步接口。其本身可以提供同步和異步應用,並且可以並行處理。還能處理多種通用協議,包括HTTP,HTTP2和WebSocket。
點擊“Create"
[外鏈圖
拓展:
激活Django環境
[拓展]:在django的交互環境裡查看版本
在python.console裡面也可以驗證
manage.py:一個讓你用各種方式管理Django項目的命令行工具
# 原始建法
django-admin startapp
# 當用manage.py腳本後
python manage.py startapp
4.啟動項目
還可以自定義端口
也可以指定IP的綁定的host:
python manage.py runserver 0:9000
0:表示0.0.0.0,綁定當前host主機的實際IP地址
在浏覽器中,如果要訪問本地的IP地址,可以訪問:
- http://localhost:9000
- http://127.0.0.1:9000
- http://(通過終端查詢到的ip地址):9000
[注意]
修改主工程目錄下的settings.py文件
ALLOWED_HOSTS = ['*'] # 白名單
python manage.py startapp login
- Django采用 MVC設計思想,設計出自己的MTV,字母一一對應。m對m,v對t,c對v
- 在views中,角色是Controller控制器,通過Models將數據加載出來,再通過T(emplate)模板將數據渲染出來,最後將渲染後的HTML封裝成Response響應對象返回給Django框架
- models數據模型,采用了ORM框架,實現數據的CURD操作。同時支持模型之間的外鍵關聯操作
- template 將數據渲染出來
在login應用中的views.py裡,寫如下代碼
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def index(request):
return HttpResponse('hello world')
在主工程的主路由裡面,添加如下代碼,並啟動
效果展示:
還可以創建子路由來訪問Web
- 使用子路由時,將子路由添加到主路由裡
主路由修改:
子路由修改
login裡views裡的接口修改:
重寫啟動項目,效果如下:
[注意] view處理函數的參數必須包含request,它是WSGIRequest類的實例,也是HttpRequest的子類。可以從request對象中獲取客戶端請求的路徑以及請求頭和body數據。
需要注意的點:
第一步,配置數據庫,采用默認的數據庫sqlite3(後面可替換成其他數據庫)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
第二步,創建模型類,在login模塊的models.py添加如下代碼:
class User(models.Model):
# 默認情況下,存在id字段
# 也就是說不設置主鍵,它會自己添加一個id字段,下行中設置了主鍵,數據表中就不會出現默認的id字段了
user_id = models.IntegerField(primary_key=True)
# 最大20個字符,不重復
name = models.CharField(max_length=20,unique=True)
pwd = models.CharField(max_length=100)
第三步,在主設置配置
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login',
]
第四步,生成數據表(模型類)的遷移文件
python manage.py makemigrations
[注意] 確認模型類所在的app是否添加到settings.py的INSTALLED_APPS列表中。(即做第四步的時候要完成第三步)
第五步,執行數據模型類的遷移文件
python manage.py migrate
[注意]:1.打開表的時候,需要reload刷新一下
2.此時表名的以"模塊名_類名"命名的
【注意1】 第一次遷移時,會自動遷移django自帶app下的遷移文件
【注意2】 如果修改了模型類,必須要’makemigrations’和’migrate’操作
python manage.py makemigrations
python manage.py migrate
phone = models.CharField(max_length=11,null=True)
email = models.CharField(max_length=50,null=True)
拓展一下:
python manage.py sqlmigrate 應用名 編號
添加兩條數據,進行測試
拓展:
命令:
python manage.py shell
>>> from login.models import User
>>> User.objects.all()
【注意】objects是什麼?
- objects是Model的元類中創建Manage類的實例,也是QuerySet查詢結果類實例
- objects提供了對模型的查詢相關方法
查詢數據
User.objects.all()查詢所有的數據,返回可迭代的對象(QuerySet實例),元素是模型類的實例對象。
issubclass() 方法用於判斷參數 class 是否是類型參數 classinfo 的子類。
查看QuerySet的方法
QuerySet常用的實例方法
- all() 全部查詢
- first() 查第一個
- last() 查最後一個
- get(屬性名=屬性值) 查指定的 # pk主鍵列名屬性
- delete() 刪除
- filter(屬性名=屬性值) 過濾查詢
- count() 統計記錄個數
# 方式一
>>> u1 = User(name='a',pwd='1',phone='123345')
>>> u1.save()
# 方式二
>>> u3 = User()
>>> u3.name='ee'
>>> u3.pwd='133'
>>> u3.phone='5433'
>>> u3.save()
模型類實例方法:
- save() 保存數據
- delete() 刪除數據
- refresh_from_db() 同步數據 (從數據庫的表中更新當前實例的屬性)