Django筆記
1.安裝Django:pip install Django==2.1 (現在最新版本是3.1,但是相應的資料庫也需要更新)
2.Django和flask的區別:
flask:是輕量級的,一般做mock介面
Django:是重量級
3.用命令建立Django專案
1.建立專案的命令:django-admin startproject 專案名稱
2.啟動Django命令:首先要進入到專案中:cd 專案名稱
然後執行 python manage.py runserver
3.python manage.py runserver 起的是本機的可以訪問,預設埠號是8000
4.python manag.py runserver 0.0.0.0:8000 任何人都可以訪問
5. python manger.py runserver 127.0.0.1:8002 本機可以訪問,指定埠號是8002
6.建立子模組的命令: python manage.py startapp 子模組名稱
4.用pycharm建立Django專案
建立完成,執行Django,只需要點選執行小圖示
5.Django使用的開發模式
首先了解MVC模式:
model:資料庫
view:前端展示
controller:邏輯控制
Django使用的模式是:
model:資料庫
template:前端展示
6.Django的結構:
1. setting:配置目錄,新增子模組需要配置,配置html的路徑,js、css配置
LANGUAGE_CODE = 'en-us'#修改頁面展示的語言是中文,還是英文;en-us是英文,zh-Hans是中文 TIME_ZONE = 'Asia/Shanghai'#這個欄位代表著時區,與資料庫中增加資料中的建立時間有關,Asia/Shanghai代表著東八區的時間 USE_I18N = True USE_L10N = True USE_TZ = False#這個也是和時區有關,為False是東八區的時間,為True就是標準時區
建立子模組,需要在setting中配置:
INSTALLED_APPS = [#這裡匯入新增的app 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'user'#把子模組的名字放進來 ]
配置template的路徑
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')],#尋找到放HTML的地址 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, },
配置js、css
STATIC_URL = '/static/' STATICFILES_DIRS = ( os.path.join(BASE_DIR,'static'), )
2.views裡寫邏輯:
from django.shortcuts import render,HttpResponse from . import models # Create your views here. def user_info(request):#這裡的request有用的 s='你好' return HttpResponse(s)
3.urls.py:放views裡涉及到url的集合地
from django.contrib import admin from django.urls import path from user import views #匯入寫的函式名稱 urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.user_info),#第一個裡隨便寫一個名字,後面寫函式名稱,不能有括號 # path('welcome/', views.welcome),#第一個裡隨便寫一個名字,後面寫函式名稱,不能有括號 # path('', views.index),#這裡隨便寫一個名字,後面寫函式名稱 ]
4.wsgi.py:部署專案的時候會用到該檔案
5.models.py:釋放資料結構的
from django.db import models # Create your models here. class Category(models.Model): name = models.CharField(verbose_name='分類名稱',max_length=20,unique=True)#verbose表示欄位名,max_length欄位最多能有多長,unique為True的時候名字該欄位不能重複 create_time = models.DateTimeField(verbose_name='建立時間',auto_now_add=True)#auto_now_add表示建立的時間,不會改變 update_time = models.DateTimeField(verbose_name='修改時間',auto_now=True)#auto_now可以一直改變 class Meta: db_table='category'#表的名稱 verbose_name='分類' verbose_name_plural=verbose_name ordering=['-create_time','name']#ordering表示排序,-create_time按建立時間降序排序,create_time按建立時間升序排序
表建好後,需要執行命令,實現物理表
python manage.py makemigratuons
python manage.py makemigrate
執行完成後需要檢查才能知道表是否已經建成功
找到db.sqlite.3複製路徑,開啟Navicat Premium工具,點選連線SQLIte,把複製的地址放進去,檢視新建的表
6.templates目錄下面放html
7.static目錄下面放js、css
8.操作資料庫
前提:
import os,django # Create your tests here. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'sky.settings') django.setup()#這個必須要的 from user import models
增加有兩種方法
#第一種增加的方法 category=models.Category(name='Python') category.save() #第二種增加的方法 models.Category.objects.create(name='Linux')
檢視也有兩種方法,查詢返回的結果都是obj型別的
c=models.Category.objects.get(name='Python')#get方法只能找只有一條記錄的資料,否則就會報錯,查詢不存在的資料也會報錯 print(c.id) print(c.name) c=models.Category.objects.filter(name='Python')#filter方法查詢的資料返回的是一個數組,不管遇到什麼情況,都不會報錯, print(c[0].id) print(c[0].name) c=models.Category.objects.get(name='Python',id=1)#,表示and多個條件查詢 print(c.id) print(c.name)
修改也有兩種方法
#第一種方法 c=models.Category.objects.get(name='python1') c.name='python' c.save() #第二種方法(可以批量修改) c=models.Category.objects.filter(name='python') c.update(name='Java')
刪除也有兩種方法
#第一種方法 c1=models.Category.objects.get(id=1) c1.delete() #第二種方法,可以刪除多條 c1=models.Category.objects.filter(id=2) c1.delete()
兩張表存在一對多的關係(比如A表多對一B表),在外來鍵上設定on-delete,有幾種不同的情況
models.do-nothing:刪除A表中的資料,對B表沒有影響
models.protect:刪除A表中的資料,A表還有和B關聯的資料,這時不讓刪除
models.cascad:刪除A表中的資料,B表和A表中的有關聯的資料也會被刪除
models.set_default:前提B表結構中設定預設值,刪除A表中的資料,B表中與A有關聯的資料取預設值
models.set_NULL:前提是這邊可以為NULL,刪除A表中的資料,B表中與A有關聯的資料取NULL
models.set:刪除A表中的資料,B表中與A有關聯的資料函式返回的值