1. 程式人生 > 實用技巧 >Django筆記

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:資料庫

view:邏輯控制
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有關聯的資料函式返回的值