python_18(Django基礎)

第1章 web框架的本質
1.1 socket
1.2 空格後面是主體內容
1.3 HTTP協議
1.3.1 響應流程
1.4 HTTP請求方法
1.5 HTTP工做原理
1.6 URL
1.7 HTTP請求格式
1.8 HTTP響應格式
1.9 根據不一樣的路徑返回不一樣內容
1.10 進階版
1.11 根據訪問的路徑返回不一樣的動態頁面
第2章 Django安裝建立
2.1 部署安裝
2.1.1 下載
2.2 命令行建立項目
2.2.1 djangoadmin
2.2.2 添加環境變量
2.2.3 建立命令
2.3 pycharm 形式建立項目
2.4 命令行啓動項目
2.4.1 關閉
2.5 建立app
2.5.1 目錄結構
2.6 註冊APP
2.7 第一個index
第3章 函數規範
3.1.1 app.views.py:
3.1.2 untitled3.urls.py
3.1.3 disable cache
3.2 靜態文件
3.2.1 別名
第4章 模板(未完待續)
4.1 建立templates目錄
4.2 修改settings文件
4.3 render模塊
4.4 特殊符號{{}}
4.4.1 變量
第5章 路由系統(未完待續)
5.1 基本格式
5.2 urls.py
5.3 參數說明
5.4 區別django2.0
5.5 注意事項
5.6 補充說明
第6章 settings介紹(未完待續)
6.1 目錄介紹
6.2 模板配置
6.3 靜態文件配置
6.4 中間件配置
第7章 Django視圖函數
7.1 基礎必備三件套:
7.2 HttpResponse
7.3 render
7.4 redirect
7.5 request
7.5.1 path_info
7.6 request.method
7.6.1 request.POST.get
7.6.2 request.GET
第8章 ORM數據庫連接
8.1 建立數據庫
8.2 配置settings
8.3 配置pymysql
8.4 配置models.py
8.5 執行數據庫遷移的命令
8.6 ORM操做
8.6.1 查詢
8.6.2 增長
8.6.3 刪除
8.6.4 修改css

第1章 web框架的本質

1.1 socket

基於最基本的socket演變而來html

python_socket(代碼)python

#!/usr/bin/env pythonmysql

# -*- coding:utf-8 -*-web

 import socket正則表達式

sk = socket.socket()sql

sk.bind(('127.0.0.1',80))數據庫

sk.listen()django

while True:bootstrap

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b"ok")

    conn.close()

瀏覽器訪問打印

b'GET / HTTP/1.1\r\nHost: 127.0.0.1\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, sdch, br\r\nAccept-Language: zh-CN,zh;q=0.8\r\n\r\n'

b'GET /favicon.ico HTTP/1.1\r\nHost: 127.0.0.1\r\nConnection: keep-alive\r\nPragma: no-cache\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36\r\nAccept: image/webp,image/*,*/*;q=0.8\r\nReferer: http://127.0.0.1/\r\nAccept-Encoding: gzip, deflate, sdch, br\r\nAccept-Language: zh-CN,zh;q=0.8\r\n\r\n'

 

咱們將\r\n替換成換行看得更清晰點:

 

GET / HTTP/1.1 

Host: 127.0.0.1:8080 

Connection: keep-alive 

Cache-Control: max-age=0 

Upgrade-Insecure-Requests: 1 

User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3355.4 Safari/537.36 

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 

Accept-Encoding: gzip, deflate, br 

Accept-Language: zh-CN,zh;q=0.9 

Cookie: csrftoken=CtHePYARJOKNx5oNVwxIteOJXpNyJ29L4bW4506YoVqFaIFFaHm0EWDZqKmw6Jm8 

  

訪問知乎顯示

 

 

1.2 空格後面是主體內容

import socket

 sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

 while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b'HTTP/1.1 200 ok\r\nContent-Type: text/html: charset=utf-8\r\n\r\n')

    conn.send('隨便'.encode('utf-8'))

    conn.close()

sk.close()

瀏覽器輸出

1.3 HTTP協議

1.3.1 響應流程

在瀏覽器地址欄鍵入URL,按下回車以後會經歷如下流程:

l  瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;

l  解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器創建TCP鏈接;

l  瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文做爲 TCP 三次握手的第三個報文的數據發送給服務器;

l  服務器對瀏覽器請求做出響應,並把對應的 html 文本發送給瀏覽器;

l  釋放 TCP鏈接;

l  瀏覽器將該 html 文本並顯示內容;  

1.4 HTTP請求方法

共有八種方法(也稱「動做」)來以不一樣方式操做指定的資源,其中最多見的有兩種:

l  GET

向指定的資源發出「顯示」請求,使用GET方法應該只用在讀取數據,而不該該被用於產生反作用的操做中,例如在web application中,其中一個緣由是GET可能會被網絡蜘蛛隨意訪問。

l  POST

向指定資源提交數據,請求服務器進行處理(例如提交表單或者上環文件)。數據被包含在請求文本中,這個請求可能會建立新的資源或者修改現有資源,或者都有

 

1.5 HTTP工做原理

HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行做爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。

1.6 URL

超文本傳輸協議(HTTP)的統一資源定位符將從因特網獲取信息的五個基本元素包括在一個簡單的地址中:

l  傳送協議。

l  層級URL標記符號(爲[//],固定不變)

l  訪問資源須要的憑證信息(可省略)

l  服務器。(一般爲域名,有時爲IP地址)

l  端口號。(以數字方式表示,若爲HTTP的默認值「:80」可省略)

l  路徑。(以「/」字符區別路徑中的每個目錄名稱)

l  查詢。(GET模式的窗體參數,以「?」字符爲起點,每一個參數以「&」隔開,再以「=」分開參數名稱與數據,一般以UTF8的URL編碼,避開字符衝突的問題)

l  片斷。以「#」字符爲起點

以http://www.luffycity.com:80/news/index.html?id=250&page=1 爲例, 其中:

 

http,是協議;

www.luffycity.com,是服務器;

80,是服務器上的網絡端口號;

/news/index.html,是路徑;

?id=250&page=1,是查詢。

 

大多數網頁瀏覽器不要求用戶輸入網頁中「http://」的部分,由於絕大多數網頁內容是超文本傳輸協議文件。一樣,「80」是超文本傳輸協議文件的經常使用端口號,所以通常也沒必要寫明。通常來講用戶只要鍵入統一資源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就能夠了。

1.7 HTTP請求格式

 

 

1.8 HTTP響應格式

 

 

1.9 根據不一樣的路徑返回不一樣內容

import socket

 sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

 while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b'HTTP/1.1 200 ok\r\nContent-Type: text/html: charset=utf-8\r\n\r\n')

    url = data.decode('utf-8').split()[1]

    print(url)

    if url == '/oumei':

        conn.send('歐美'.encode('utf-8'))

    elif url == '/rihan':

        conn.send('日韓'.encode('utf-8'))

    else:

        conn.send('正在錄製中'.encode('utf-8'))

    conn.close()

sk.close()

 

1.10 進階版

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 import socket

def oumei(url):

    return '歐美{}'.format(url).encode('utf-8')

 def rihan(url):

    return '日韓{}'.format(url).encode('utf-8')

 

def  guochan(url):

    return '國產{}'.format(url).encode('utf-8')

 list = [

    ('/rihan',rihan),

    ('/oumei',oumei),

    ('/guochan',guochan),

]

 sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

 

while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b'HTTP/1.1 200 ok\r\nContent-Type: text/html: charset=utf-8\r\n\r\n')

    url = data.decode('utf-8').split()[1]

    print(url)

    func = None

 

    for i in list:

        if i[0] == url:

            func = i[1]

            break

    if func:

        ret = func(url)

    else:

        ret = '正在錄製中'.encode('utf-8')

    conn.send(ret)

    conn.close()

 

sk.close()

 

1.11 根據訪問的路徑返回不一樣的動態頁面

#!/usr/bin/env python

# -*- coding:utf-8 -*-

 

import socket

def index(url):

    import time

    with open('index.html','r',encoding='utf-8') as f:

        data = f.read()

        data = data.replace(@@xx@@,time.strftime("%Y-%m-%d %H:%M:%S"))

    return data.encode('utf-8')

 

def oumei(url):

    return '歐美{}'.format(url).encode('utf-8')

def rihan(url):

    return '日韓{}'.format(url).encode('utf-8')

 

def  guochan(url):

    return '國產{}'.format(url).encode('utf-8')

 

list = [

    ('/rihan',rihan),

    ('/oumei',oumei),

    ('/guochan',guochan),

]

 

sk = socket.socket()

sk.bind(('127.0.0.1',80))

sk.listen()

 

while True:

    conn,addr = sk.accept()

    data = conn.recv(8096)

    print(data)

    conn.send(b'HTTP/1.1 200 ok\r\nContent-Type: text/html: charset=utf-8\r\n\r\n')

    url = data.decode('utf-8').split()[1]

    print(url)

    func = None

 

    for i in list:

        if i[0] == url:

            func = i[1]

            break

    if func:

        ret = func(url)

    else:

        ret = '正在錄製中'.encode('utf-8')

    conn.send(ret)

    conn.close()

 

sk.close()

index.html(代碼)

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>首頁</title>

</head>

<body>

<h1>澳門首家皇家賭場上線啦!!</h1>

@@xx@@

</body>

</html>

 

第2章 Django安裝建立

2.1 部署安裝

版本信息:1.11 目前只有1.11支持python2.7

\

 

2.1.1 下載

命令行:

命令行:pip3 install django==1.11.15

查看命令:pip3 list

pycham下載

 

2.2 命令行建立項目

2.2.1 djangoadmin

 

 

2.2.2 添加環境變量

 

 

 

2.2.3 建立命令

django-admin startproject 項目名

 

例:

django-admin startproject  s22

當前路徑下建立的s22項目

 

2.3 pycharm 形式建立項目

 

 

2.4 命令行啓動項目

cd   C:\Users\Administrator\s22

python3 manage.py runserver

 

瀏覽器訪問:

http://127.0.0.1:8000/

 

更改端口

python3 manage.py runserver 80

python3 manage.py runserver 127.0.0.1:9999

2.4.1 關閉

 

 

2.5 建立app

l  命令行建立

python manage.py startapp  app01

l  pycharm建立

 

 

 

 

2.5.1 目錄結構

admin -----管理後臺

apps ----配置相關

models-----

views-------具體業務邏輯函數

 

 

 

2.6 註冊APP

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    'app01',

    'app02.apps.AppConfig' è 標準寫法會自動讀取app02下的py文件

]

 

2.7 第一個index

urls.py:

from django.conf.urls import url

from django.contrib import admin

from django.shortcuts import HttpResponse

 

def index(request):

    return HttpResponse('這是index頁面')

urlpatterns = [

    url(r'^admin/', admin.site.urls),

    url(r'index',index)

]

輸出

 

 

第3章 函數規範

l  urls.py---------------------只記錄地址url

l  app下的views.py-------寫入函數代碼

 

3.1.1 app.views.py:

from django.shortcuts import render

 

# Create your views here.

from django.shortcuts import HttpResponse

 

def index(request):

    return HttpResponse('<h1>這是index頁面<\h1>')

3.1.2 untitled3.urls.py

from django.contrib import admin

from app01 import views

 

urlpatterns = [

    url(r'^admin/', admin.site.urls),

    url(r'index',views.index)

]

3.1.3 disable cache

解釋:清除緩存影響

 

 

3.2 靜態文件

settings.py

STATIC_URL = '/static999/' #別名

STATICFILES_DIRS=[

    os.path.join(BASE_DIR,'static')

]

註釋;變量名不能錯有兩個s

 

3.2.1 別名

例:login.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>登陸頁面</title>

    <link rel="stylesheet" href="/static999/bootstrap-3.3.7/css/bootstrap.css">

    <link rel="stylesheet" href="/static/lgoin.css">

</head>

 

第4章 模板(未完待續)

4.1 建立templates目錄

 

 

 

4.2 修改settings文件

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': [os.path.join(BASE_DIR,'templates')],

        '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',

            ],

        },

    },

]

 

templates.index:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>首頁</title>

</head>

<body>

<h1>這是index頁面!!!!!</h1>

</body>

</html>

 

4.3 render模塊

 

app.vivews

# Create your views here.

from django.shortcuts import HttpResponse,render

 

def index(request):

    # return HttpResponse('<h1>這是index頁面<\h1>')

    return render(request,'index.html')

 

4.4 特殊符號{{}}

{{}} 表示變量,在模板渲染的時候替換成值     

{% %}表示邏輯相關的操做

{%endfor%}

4.4.1 變量

{{ 變量名 }}

 

變量名由字母數字和下劃線組成。

 

點(.)在模板語言中有特殊的含義,用來獲取對象的相應屬性值。

 

第5章 路由系統(未完待續)

URL配置(URLconf)就像Django所支撐網站的目錄。它的本質是URL與要爲該URL調用的視圖函數之間的映射表。

5.1 基本格式

from django.conf.urls import url

 

urlpatterns = [

     url(正則表達式, views視圖,參數,別名),

]

5.2 urls.py

從上往下進行匹配第一個參數是正則

示例

from django.conf.urls import url

from django.contrib import admin

from app01 import views

 

urlpatterns = [

    url(r'^admin/', admin.site.urls),

    url(r'index',views.index)

]

示例:

from django.conf.urls import url

from . import views

urlpatterns = [

    url(r'^articles/2003/$', views.special_case_2003),

    url(r'^articles/([0-9]{4})/$', views.year_archive),

    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),

    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),

]

5.3 參數說明

l  正則表達式:一個正則表達式字符串

l  views視圖:一個可調用對象,一般爲一個視圖函數

l  參數:可選的要傳遞給視圖函數的默認參數(字典形式)

l  別名:一個可選的name參數

5.4 區別django2.0

from django.urls import path,re_path

 

urlpatterns = [

    path('articles/2003/', views.special_case_2003),

    path('articles/<int:year>/', views.year_archive),

    path('articles/<int:year>/<int:month>/', views.month_archive),

    path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail),

]

5.5 注意事項

l  urlpatterns中的元素按照書寫順序從上往下逐一匹配正則表達式,一旦匹配成功則再也不繼續。

l  若要從URL中捕獲一個值,只須要在它周圍放置一對圓括號(分組匹配)。

l  不須要添加一個前導的反斜槓,由於每一個URL 都有。例如,應該是^articles 而不是 ^/articles。

l  每一個正則表達式前面的'r' 是可選的可是建議加上。

5.6 補充說明

是否開啓URL訪問地址後面不爲/跳轉至帶有/的路徑的配置項

APPEND_SLASH=True

Django settings.py配置文件中默認沒有 APPEND_SLASH 這個參數,但 Django 默認這個參數爲 APPEND_SLASH = True。 其做用就是自動在網址結尾加'/'。

 

其效果就是:

咱們定義了urls.py:

 

from django.conf.urls import url

from app01 import views

 

urlpatterns = [

    url(r'^blog/$', views.blog),

]

訪問 http://www.example.com/blog 時,默認將網址自動轉換爲 http://www.example/com/blog/ 。

若是在settings.py中設置了 APPEND_SLASH=False,此時咱們再請求 http://www.example.com/blog 時就會提示找不到頁面。

第6章 settings介紹(未完待續)

6.1 目錄介紹

mysite/

├── manage.py  # 管理文件

└── mysite  # 項目目錄

    ├── __init__.py

    ├── settings.py  # 配置

    ├── urls.py  # 路由 --> URL和函數的對應關係

    └── wsgi.py  # runserver命令就使用wsgiref模塊作簡單的web server

6.2 模板配置

TEMPLATES = [

    {

        'BACKEND': 'django.template.backends.django.DjangoTemplates',

        'DIRS': [os.path.join(BASE_DIR, "template")],  # template文件夾位置

        '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',

            ],

        },

    },

]

6.3 靜態文件配置

STATIC_URL = '/static/'  # HTML中使用的靜態文件夾前綴

STATICFILES_DIRS = [

    os.path.join(BASE_DIR, "static"),  # 靜態文件存放位置

]

6.4 中間件配置

說明:剛開始學習時可在配置文件中暫時禁用csrf中間件,方便表單提交測試。

MIDDLEWARE = [

    'django.middleware.security.SecurityMiddleware',

    'django.contrib.sessions.middleware.SessionMiddleware',

    'django.middleware.common.CommonMiddleware',

    # 'django.middleware.csrf.CsrfViewMiddleware',

    'django.contrib.auth.middleware.AuthenticationMiddleware',

    'django.contrib.messages.middleware.MessageMiddleware',

    'django.middleware.clickjacking.XFrameOptionsMiddleware',

]

 

第7章 Django視圖函數

 

7.1 基礎必備三件套:

              1. HttpResponse('home')                   —— 返回一個字符串

              2. render(request,'index.html')     —— 返回一個具體的頁面(tenplates寫好的)

              3. redirect(跳轉的URL)                       ——重定向  響應頭 location:'跳轉的地址'

 

from django.shortcuts import HttpResponse, render, redirect

7.2 HttpResponse

解釋:內部傳入一個字符串參數,返回給瀏覽器。

例如:

def index(request):

    # 業務邏輯代碼

    return HttpResponse("OK")

7.3 render

除request參數外還接受一個待渲染的模板文件和一個保存具體數據的字典參數。

將數據填充進模板文件,最後把結果返回給瀏覽器。(相似於咱們上面用到的jinja2)

例如:

def index(request):

    # 業務邏輯代碼

    return render(request, "index.html", {"name": "alex", "hobby": ["燙頭", "泡吧"]})

7.4 redirect

接受一個URL參數,表示跳轉到指定的URL。

例如:

def index(request):

    # 業務邏輯代碼

    return redirect("/home/")

註釋:

l  /home/ 加/表示從根開始跳轉: url 127.0.0.1:8000/home

l  home/表示在原有url上拼接: 127.0.0.1:8000/index/home

l  能夠接完整url

       return redirect("http://www.baidu.com")

 

7.5 request

       request.path_info              ——》URL路徑

       request.method              ——》請求方式

       request.POST            ——》POST提交的數據  { }

       request.GET             ——》URL上的參數   /login/?username=alex&passwor=123

             

7.5.1 path_info

獲取url訪問路徑

appo1.views.py

def index(request):

    print(request.path_info)

    return HttpResponse('<h1>這是管理頁面<\h1>')

輸出:

/index/

[20/Sep/2018 14:01:37] "GET /index/ HTTP/1.1" 200 27

7.6 request.method

解釋:獲取請求方式

7.6.1 request.POST.get

例:獲取用戶輸入POST信息

app01.views.py

#定義登陸頁面

def login(request):

    if request.method == 'POST':

        print(request.POST)

        username = request.POST.get('username','') è get獲取字典值不報錯,並定義返回值 ‘ ’爲空

        password = request.POST.get('password','')

        if username == 'lili' and password == '123456':

            return HttpResponse('登陸成功')

        else:

            return HttpResponse('登陸失敗')

    return render(request, 'login.html')

輸出

[20/Sep/2018 14:44:12] "POST /login/ HTTP/1.1" 200 12

<QueryDict: {'username': ['wang'], 'password': ['123']}>

7.6.2 request.GET

 

第8章 ORM數據庫連接

 

8.1 建立數據庫

create database django1

 

 

8.2 配置settings

# Database

# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

 

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.sqlite3',

        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

    }

}

改成

# Database

# https://docs.djangoproject.com/en/1.11/ref/settings/#databases

 

DATABASES = {

    'default': {

        'ENGINE': 'django.db.backends.mysql',èè支持的數據庫類型

        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

        'NAME': 'django2',

        'USER': 'root',

        'PASSWORD': '',

        'HOST': '127.0.0.1',

        'PORT': 3306,

    }

}

 

8.3 配置pymysql

在項目同名的文件夾下的__init__.py中寫代碼:

                    import pymysql

                    pymysql.install_as_MySQLdb()

8.4 配置models.py

 

在app下的models.py中寫類:

                    class Publisher(models.Model):

                        nid = models.AutoField(primary_key=True)

                        name = models.CharField(max_length=16)

 

8.5 執行數據庫遷移的命令

python manage.py makemigrations    # 保存APP下的models.py的變動記錄

pyhton manage.py migrate           # 將變動記錄同步到數據庫中

注意:指定app 默認全部註冊的app根據modle 來記錄來配置數據庫記錄資源

 

python manage.py makemigrations app01 針對app01作數據變動遷移 默認是setting登記過的

 

8.6 ORM操做

8.6.1 查詢

獲取全部數據

models.Publisher.objects.all()      —— 》 queryset  對象列表

獲取知足條件的全部數據數據

models.Publisher.objects.filter(name='xxx')  —— 》 queryset  對象列表

排序

models.Publisher.objects.all().order_by('id')   —— 》 queryset  對象列表  升序

models.Publisher.objects.all().order_by('-id')   —— 》 queryset  對象列表  降序序

獲取一個對象

models.Publisher.objects.get(nid=1)

       # 獲取不到或者獲取多個就報錯

8.6.2 增長

models.Publisher.objects.create(name='xxxxx')   —— 》成功插入的對象

8.6.3 刪除

models.Publisher.objects.filter(nid=nid).delete()  ——》 刪除知足條件的全部對象

models.Publisher.objects.get(nid=nid).delete()     ——》 刪除對應的對象

8.6.4 修改

    pub_obj = models.Publisher.objects.get(nid=nid)

                pub_obj.name = 'xxxx'

                pub_obj.save()  # 寫入數據庫

相關文章
相關標籤/搜索