中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

做ps的網(wǎng)站有哪些功能嗎蘭州seo公司

做ps的網(wǎng)站有哪些功能嗎,蘭州seo公司,附近做廣告招牌的,移動軟件開發(fā)專業(yè)把時間用在思考上是最能節(jié)省時間的事情?!猍美]卡曾斯 導(dǎo)言 寫在前面 本文部分內(nèi)容引用的是Django官方文檔,對官方文檔進(jìn)行了解讀和理解,對官方文檔的部分注釋內(nèi)容進(jìn)行了翻譯,以方便大家的閱讀和理解。 概述 在上一篇文章里&#xff0…

把時間用在思考上是最能節(jié)省時間的事情?!猍美]卡曾斯

導(dǎo)言

寫在前面

本文部分內(nèi)容引用的是Django官方文檔,對官方文檔進(jìn)行了解讀和理解,對官方文檔的部分注釋內(nèi)容進(jìn)行了翻譯,以方便大家的閱讀和理解。

概述

在上一篇文章里,我們學(xué)習(xí)了Django的數(shù)據(jù)庫以及拓展數(shù)據(jù)庫的使用以及設(shè)置項。這篇文章,我們開始學(xué)習(xí)Django的模型、API以及后臺管理系統(tǒng)的知識。
在 Django 里寫一個數(shù)據(jù)庫驅(qū)動的 Web 應(yīng)用的第一步是定義模型 - 也就是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計和附加的其它元數(shù)據(jù)。關(guān)于API,進(jìn)入交互式 Python 命令行,嘗試一下 Django 為你創(chuàng)建的各種 API。

為你的員工或客戶生成一個用戶添加,修改和刪除內(nèi)容的后臺是一項缺乏創(chuàng)造性和乏味的工作。因此,Django 全自動地根據(jù)模型創(chuàng)建后臺界面。
Django 產(chǎn)生于一個公眾頁面和內(nèi)容發(fā)布者頁面完全分離的新聞類站點的開發(fā)過程中。站點管理人員使用管理系統(tǒng)來添加新聞、事件和體育時訊等,這些添加的內(nèi)容被顯示在公眾頁面上。Django 通過為站點管理人員創(chuàng)建統(tǒng)一的內(nèi)容編輯界面解決了這個問題。管理界面不是為了網(wǎng)站的訪問者,而是為管理者準(zhǔn)備的。

學(xué)習(xí)目標(biāo)

  1. 認(rèn)識和學(xué)習(xí)模型,并初步掌握腳本的編寫方法
  2. 學(xué)習(xí)模型的激活方法,以及運行數(shù)據(jù)遷移命令
  3. 了解并了解Django的API,了解常用的相關(guān)命令
  4. 初步認(rèn)識后臺管理系統(tǒng),創(chuàng)建Django后臺超級管理員以及后臺相關(guān)知識

模型

概述

一個模型就是單個定義你的數(shù)據(jù)的信息源。模型中包含了不可缺少的數(shù)據(jù)區(qū)域和你存儲數(shù)據(jù)的行為。在模型中,通過Python類進(jìn)行描述。
例如,我們現(xiàn)在需要創(chuàng)建兩個模型,那么就需要兩個Python類,問題 Question 和選項 Choice。Question 模型包括問題描述和發(fā)布時間。Choice 模型有兩個字段,選項描述和當(dāng)前得票數(shù)。每個選項屬于一個問題。

#導(dǎo)入models的包
from django.db import models
"""
定義Python的類,如下面的代碼的實例。
自定義的 Model 都必須繼承自 django.db.models.Model
"""class Question(models.Model):question_text = models.CharField(max_length=30)pub_date = models.DateTimeField("date published")class Choice(models.Model):question =  models.ForeignKey(Question, on_delete=models.CASCADE)choice_text = models.CharField(max_length=200)votes = models.IntegerField(default=0)

模型繼承類型的介紹

Django Model 的繼承與 Python 類的繼承是一樣的,只是 Django 要求所有自定義的 Model 都必須繼承自 django.db.models.Model。在 Django 中 Model 之間有三種繼承模型,它們分別是抽象基類、多表繼承以及代理模型。

1. 抽象基類

抽象類繼承的作用是將子表中通用的字段聚合在一起,并將這些字段統(tǒng)一定義在抽象基類中,避免于重復(fù)定義這些字段。抽象基類的定義通過在模型的 Meta 中定義屬性 abstract=True 來實現(xiàn)。示例如下:

from django.db import modelsclass AbstractBase(models.Model):id = models.AutoField()content = models.CharField(max_length=100)username = models.CharField(max_length=80)nowday = models.DateTimeField()class Meta:abstract = Trueclass SomeThing(AbstractBase):testexams = models.CharField(max_length=50)class SomeComment(AbstractBase):level = models.CharField(max_length=20)

2. 多表繼承

這是 Django 支持的第二種繼承方式,因為每個類都是一個完整的 model,而不屬于抽象基類,所以父 model 和子 Model 都會有數(shù)據(jù)庫表,而且 Django 默認(rèn)會給和子表和父表之間自動創(chuàng)建一個 OneToOneField 數(shù)據(jù)表關(guān)系,并且該字段將作為子表的主鍵。示例如下:

from django.db import models
class a(A):
testname=models.charFiled(max_length=255,help_text="測試")

3. 代理模型

代理模型用來給父 Model 添加一些方法或者修改其 Meta 選項,但是父 Model 的字段定義不會被修改。我們可以理解為對原父 Model 進(jìn)行了 Copy,而被 Copy 出來的 Model 就叫做父 Model 的代理模型,但是這個代理模型又有其自己的特點,這相當(dāng)于 Python 面向?qū)ο笾械念惱^承與多態(tài)。

class BookExtend(Book):"""BOOK代理模型"""class Meta:ordering=['id'] #定義Meta選項順序排序按照id字段proxy=True #設(shè)置代理模型def __str__(self):return "title:%s pub:%s price:%s" % (self.title, self.pub, self.price) #定義方法

激活你的模型

將APP添加到Django的相關(guān)設(shè)置中

上面的一小段用于創(chuàng)建模型的代碼給了 Django 很多信息,通過這些信息,Django 可以:

  • 為這個應(yīng)用創(chuàng)建數(shù)據(jù)庫 schema(生成 CREATE TABLE 語句)。
  • 創(chuàng)建可以與 Question 和 Choice 對象進(jìn)行交互的 Python 數(shù)據(jù)庫 API。
    但是首先得把 polls 應(yīng)用安裝到我們的項目里。

現(xiàn)在,我們要回到settings.py中,修改我們的代碼:

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','polls.apps.PollsConfig',
]

在這里插入圖片描述

數(shù)據(jù)庫的遷移操作

現(xiàn)在你的 Django 項目會包含 polls 應(yīng)用。接著在終端運行下面的命令:

py manage.py makemigrations polls

在這里插入圖片描述

這條命令并不會直接執(zhí)行數(shù)據(jù)庫遷移的操作,而是會檢測你對模型文件的修改,并且把修改的部分儲存為一次 遷移。
現(xiàn)在,讓我們看看遷移命令會執(zhí)行哪些 SQL 語句。sqlmigrate 命令接收一個遷移的名稱,然后返回對應(yīng)的 SQL:

py manage.py sqlmigrate polls 0001

你將會看到下圖的輸出:
在這里插入圖片描述

在官方文檔里,重組為我們能看懂的格式,如下:

BEGIN;
--
-- Create model Question
--
CREATE TABLE "polls_question" ("id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,"question_text" varchar(200) NOT NULL,"pub_date" timestamp with time zone NOT NULL
);
--
-- Create model Choice
--
CREATE TABLE "polls_choice" ("id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,"choice_text" varchar(200) NOT NULL,"votes" integer NOT NULL,"question_id" bigint NOT NULL
);
ALTER TABLE "polls_choice"ADD CONSTRAINT "polls_choice_question_id_c5b4b260_fk_polls_question_id"FOREIGN KEY ("question_id")REFERENCES "polls_question" ("id")DEFERRABLE INITIALLY DEFERRED;
CREATE INDEX "polls_choice_question_id_c5b4b260" ON "polls_choice" ("question_id");COMMIT;

現(xiàn)在,再次運行 migrate 命令,在數(shù)據(jù)庫里創(chuàng)建新定義的模型的數(shù)據(jù)表:

py manage.py migrate

在這里插入圖片描述
此時,數(shù)據(jù)庫中多了兩張表,如下圖:
在這里插入圖片描述

小結(jié)

現(xiàn)在,你只需要記住,改變模型需要這三步:
1、編輯 models.py 文件,改變模型。
2、運行 python manage.py makemigrations 為模型的改變生成遷移文件。
3、運行 python manage.py migrate 來應(yīng)用數(shù)據(jù)庫遷移。

學(xué)習(xí)至此,你可以去休息一下,或者消化或者練習(xí)一下以上的知識,更快地掌握,不至于很快地忘記你學(xué)的知識。掌握并熟練運用一種知識,終究是要勤加練習(xí)的,不能偷懶。

分界線以下的知識,本是下一篇文章的內(nèi)容,為了知識的連貫性,我將它們放在了一起,大家可以自由選擇是否學(xué)習(xí)或者將這里做一個分界線。

人之為學(xué),不日進(jìn)則日退?!櫻孜?/mark>

-------------------------------------------------分界線---------------------------------------------

初步認(rèn)識和使用API

首先,通過以下命令進(jìn)入交互行:

py manage.py shell

執(zhí)行這個命令的目的,并不是單單地想要使用python,而是我們需要根據(jù)settings.py設(shè)置 Python 包的導(dǎo)入路徑。并且,進(jìn)入到這個界面,就可以探索在命令行探索數(shù)據(jù)庫,即使你不懂?dāng)?shù)據(jù)庫相關(guān)的知識。怎么樣,是不是很貼心。

#請在shell交互行嘗試以下的命令探索
from polls.models import Choice, Question
#查詢表中所有的對象
Question.objects.all()
#輸出:<QuerySet []>
from django.utils import timezone
#使用命令向模型傳遞參數(shù)
q = Question(question_text="What's new?", pub_date=timezone.now())
#執(zhí)行保存命令后,Django會執(zhí)行SQL的插入語句
q.save()
#查看id
q.id
#輸出:1
#查看文本
q.question_text
#輸出:"What's new?"
#查看日期
q.pub_date
#輸出:datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=datetime.timezone.utc)
#改變文本內(nèi)容
q.question_text = "What's up?"
#執(zhí)行保存后,Django會執(zhí)行修改操作
q.save()
#查看輸出
Question.objects.all()
#輸出:<QuerySet [<Question: Question object (1)>]>

講到這里,大家有沒有發(fā)現(xiàn)一個問題,貌似<QuerySet [<Question: Question object (1)>]>,這個東西對于我們來講,并沒有什么實質(zhì)性的幫助。它只能讓我們知道里面有東西,但具體是什么卻不知道,當(dāng)然,你完全可以去SQL命令行或者可視化軟件里面查看,但是我們今天討論的是Django的命令行。所以,現(xiàn)在我們要做的事情就是,修復(fù)這個問題。
在這里插入圖片描述

現(xiàn)在讓我們會到models這個文件,給 Question 和 Choice 增加 str() 方法。

from django.db import modelsclass Question(models.Model):# ...def __str__(self):return self.question_textclass Choice(models.Model):# ...def __str__(self):return self.choice_text

給模型增加 str() 方法是很重要的,這不僅僅能給你在命令行里使用帶來方便,Django 自動生成的 admin 里也使用這個方法來表示對象。

讓我們再為此模型添加一個自定義方法,修改models中的代碼片段

import datetimefrom django.db import models
from django.utils import timezoneclass Question(models.Model):# ...def was_published_recently(self):return self.pub_date >= timezone.now() - datetime.timedelta(days=1)

保存這些更改并再次運行 python manage.py shell 以啟動新的 Python 交互式 shell:

重新運行shell命令行

添加str方法后的變化

from polls.models import Choice, Question
Question.objects.all()
#輸出:<QuerySet [<Question: What's up?>]>

在這里插入圖片描述

使用ID查詢

Question.objects.filter(id=1)
#<QuerySet [<Question: What's up?>]>

在這里插入圖片描述

使用關(guān)鍵字進(jìn)行模糊查詢

Question.objects.filter(question_text__startswith="What")
#<QuerySet [<Question: What's up?>]>

在這里插入圖片描述

通過時間查詢對應(yīng)的對象信息

from django.utils import timezone
current_year = timezone.now().year
Question.objects.get(pub_date__year=current_year)
#<QuerySet [<Question: What's up?>]>

在這里插入圖片描述

異常處理

我在操作這部分內(nèi)容的時候,出現(xiàn)了下面兩種錯誤
1、NameError: name ‘Question’ is not defined
解決方案:導(dǎo)入from polls.models import Choice, Question,導(dǎo)入對應(yīng)的參數(shù)
2、Django (2006, ‘MySQL server has gone away’)
解決方案:重新啟動服務(wù)器,一般都能解決。
3、執(zhí)行【Question.objects.get(id=2)】
解決方案:id不存在,創(chuàng)建該字段或者忽略該問題。

通過主鍵查詢

Question.objects.get(pk=1)
#<Question: What's up?>

在這里插入圖片描述

確保自定義的方法是有效的

q = Question.objects.get(pk=1)
q.was_published_recently()
#輸出:True

在這里插入圖片描述

處理models中的其它類

選項的查詢以及創(chuàng)建

現(xiàn)在我們要開始處理我們編寫的模型中的第二個Python類:選項。

#給這個問題幾個選項,對象,執(zhí)行INSERT語句,將選擇項添加到集合中
#查詢id=1的問題,并存儲在變量q中
q = Question.objects.get(pk=1)
#顯示相關(guān)對象集中的任何選項——到目前為止還沒有。
q.choice_set.all()
#輸出:<QuerySet []>
#創(chuàng)建3個選項
q.choice_set.create(choice_text="Not much", votes=0)
#<Choice: Not much>
q.choice_set.create(choice_text="The sky", votes=0)
#<Choice: The sky>
c = q.choice_set.create(choice_text="Just hacking again", votes=0)
#選擇對象可以通過API訪問其相關(guān)的問題對象。
#確認(rèn)一下選項對應(yīng)的問題
c.question
#<Question: What's up?>
q.choice_set.all()
#<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
q.choice_set.count()
#輸出:3
#查詢
Choice.objects.filter(question__pub_date__year=current_year)
#<QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>

刪除選項的操作

#查詢出來需要刪除的選項,并存儲在變量中
c = q.choice_set.filter(choice_text__startswith="Just hacking")
#執(zhí)行刪除操作
c.delete()

小結(jié)

寫到這里,有關(guān)Django提供的API操作就暫時討論到這里啦。是不是很便捷,這就是Django的強(qiáng)大指出之一。下面讓我們一起走進(jìn)Django的后臺管理系統(tǒng),為我們更加便捷的開發(fā)工作提供便利。

Django 管理頁面

概述

為你的員工或客戶生成一個用戶添加,修改和刪除內(nèi)容的后臺是一項缺乏創(chuàng)造性和乏味的工作。因此,Django 全自動地根據(jù)模型創(chuàng)建后臺界面。
Django 產(chǎn)生于一個公眾頁面和內(nèi)容發(fā)布者頁面完全分離的新聞類站點的開發(fā)過程中。站點管理人員使用管理系統(tǒng)來添加新聞、事件和體育時訊等,這些添加的內(nèi)容被顯示在公眾頁面上。Django 通過為站點管理人員創(chuàng)建統(tǒng)一的內(nèi)容編輯界面解決了這個問題。
管理界面不是為了網(wǎng)站的訪問者,而是為管理者準(zhǔn)備的。

管理頁面的配置

創(chuàng)建超級管理員登錄賬號

要創(chuàng)建登錄賬號,請執(zhí)行以下命令:

py manage.py createsuperuser

接著,根據(jù)提示創(chuàng)建用戶名、電子郵件、密碼、確認(rèn)密碼,如下圖
在這里插入圖片描述
由于我們創(chuàng)建的是超級管理員,所以所有的警示信息都可以忽略,直接選擇y(是),直接執(zhí)行即可。電子郵件如果不輸入直接回車跳過即可。

管理頁面

啟動開發(fā)服務(wù)器

Django 的管理界面默認(rèn)就是啟用的。讓我們啟動開發(fā)服務(wù)器,看看它到底是什么樣的。如果開發(fā)服務(wù)器未啟動,用以下命令啟動它:

py manage.py runserver

訪問管理頁面并登錄

1、請訪問你的后臺管理地址,例如:http://127.0.0.1:8888/admin/。

在這里插入圖片描述
2、輸入用戶名和密碼進(jìn)入后臺管理界面,例如admin/123456
在這里插入圖片描述

向管理頁面中加入投票應(yīng)用

但是我們的投票應(yīng)用在哪呢?它沒在索引頁面里顯示。只需要再做一件事:我們得告訴管理,問題 Question 對象需要一個后臺接口。打開 polls/admin.py 文件,把它編輯成下面這樣:

from django.contrib import admin
from .models import Question
admin.site.register(Question)

體驗便捷的管理功能

現(xiàn)在我們向管理頁面注冊了問題 Question 類。Django 知道它應(yīng)該被顯示在索引頁里:
在這里插入圖片描述
點擊 “Questions” ?,F(xiàn)在看到是問題 “Questions” 對象的列表 “change list” 。這個界面會顯示所有數(shù)據(jù)庫里的問題 Question 對象,你可以選擇一個來修改。這里現(xiàn)在有我們在上一部分中創(chuàng)建的 “What’s up?” 問題。

在這里插入圖片描述
點擊 “What’s up?” 來編輯這個問題(Question)對象:
在這里插入圖片描述

變更歷史

點擊右上角的歷史,之后頁面如下圖所示:
在這里插入圖片描述
你會看到一個列出了所有通過 Django 管理頁面對當(dāng)前對象進(jìn)行的改變的頁面,其中列出了時間戳和進(jìn)行修改操作的用戶名:
在這里插入圖片描述

總結(jié)

本文將兩個課時的內(nèi)容合為一篇長文章,詳盡地討論了API、模型以及后臺管理系統(tǒng)。希望大家可以慢慢消化,認(rèn)真閱讀,有所收獲。

下一篇文章,我們將繼續(xù)深入Django,除了模型,下一篇文章我們將詳盡地講述Django的視圖,請大家繼續(xù)期待。

這一篇文章至此,已經(jīng)寫到末尾,感謝你的閱讀和支持,如果允許,請點個贊或使用打賞功能進(jìn)行鼓勵。你的打賞將是我持續(xù)更新的動力。
下一篇文章,再見!

人生就象弈棋, 一步失誤, 全盤皆輸,這是令人悲哀之事;而且人生還不如弈棋,不可能再來一局,也不能悔棋。—— 弗洛伊德

http://www.risenshineclean.com/news/35902.html

相關(guān)文章:

  • 網(wǎng)站開發(fā)所需經(jīng)費上海疫情最新數(shù)據(jù)
  • 做動態(tài)網(wǎng)站需要學(xué)什么最新的軍事新聞
  • 建設(shè)網(wǎng)站需要多少錢百度競價排名醫(yī)院事件
  • 成都網(wǎng)站建設(shè) 四川冠辰科技公司建站平臺如何隱藏技術(shù)支持
  • 統(tǒng)一企業(yè)信息管理系統(tǒng)網(wǎng)站seo博客網(wǎng)站
  • 煙臺網(wǎng)站建設(shè)優(yōu)化百度查詢關(guān)鍵詞排名工具
  • 廈門比較好的網(wǎng)站設(shè)計公司刷網(wǎng)站seo排名軟件
  • java ee只是做網(wǎng)站免費網(wǎng)站注冊免費創(chuàng)建網(wǎng)站
  • 沙井網(wǎng)站建設(shè)哈爾濱seo優(yōu)化
  • 融資網(wǎng)站建設(shè)方案競價網(wǎng)絡(luò)推廣托管
  • 可以做h5的網(wǎng)站百度指數(shù)特點
  • 男女做那個能看的視頻網(wǎng)站新產(chǎn)品宣傳推廣策劃方案
  • 網(wǎng)站建設(shè)賬戶搭建頁面關(guān)鍵詞優(yōu)化
  • 做網(wǎng)站開發(fā)錢百度指數(shù)有哪些功能
  • 泰安網(wǎng)站優(yōu)化濟(jì)南百度開戶電話
  • 重慶建網(wǎng)站公司互聯(lián)網(wǎng)服務(wù)平臺
  • 做網(wǎng)站怎樣備案推廣代理平臺
  • 江陰規(guī)劃建設(shè)局網(wǎng)站關(guān)鍵詞排名方案
  • 歐美網(wǎng)站欣賞網(wǎng)站關(guān)鍵詞優(yōu)化培訓(xùn)
  • 寶雞品牌網(wǎng)站建設(shè)百度關(guān)鍵字搜索排名
  • 舉報網(wǎng)站賺錢安徽建站
  • 個人網(wǎng)站備案名稱舉例西安百度推廣優(yōu)化托管
  • 無錫seo網(wǎng)站管理seo是啥軟件
  • 河南網(wǎng)站制作東莞哪種網(wǎng)站推廣好
  • 國內(nèi)網(wǎng)站建設(shè)的趨勢是怎樣的品牌的宣傳及推廣
  • 廣州站長北京seo優(yōu)化服務(wù)
  • 荔灣網(wǎng)站建設(shè)哪家好百度競價開戶公司
  • 找公司做網(wǎng)站要注意什么2022知名品牌營銷案例100例
  • 車公廟網(wǎng)站建設(shè)2345網(wǎng)址導(dǎo)航主頁
  • js制作網(wǎng)頁游戲免費優(yōu)化網(wǎng)站排名