乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      編寫你的第一個 Django 應用,第 2 部分 | Django 文檔 | Django

       寧靜致遠oj1kn5 2019-06-13

      編寫你的第一個 Django 應用,第 2 部分?

      這部分教程從 教程第 1 部分 結尾的地方繼續(xù)講起。我們將建立數據庫,創(chuàng)建您的第一個模型,并主要關注 Django 提供的自動生成的管理頁面。

      數據庫配置?

      現在,打開 mysite/settings.py 。這是個包含了 Django 項目設置的 Python 模塊。

      通常,這個配置文件使用 SQLite 作為默認數據庫。如果你不熟悉數據庫,或者只是想嘗試下 Django,這是最簡單的選擇。Python 內置 SQLite,所以你無需安裝額外東西來使用它。當你開始一個真正的項目時,你可能更傾向使用一個更具擴展性的數據庫,例如 PostgreSQL,避免中途切換數據庫這個令人頭疼的問題。

      如果你想使用其他數據庫,你需要安裝合適的 database bindings ,然后改變設置文件中 DATABASES 'default' 項目中的一些鍵值:

      • ENGINE -- 可選值有 'django.db.backends.sqlite3','django.db.backends.postgresql','django.db.backends.mysql',或 'django.db.backends.oracle'。其它 可用后端
      • NAME - 數據庫的名稱。如果使用的是 SQLite,數據庫將是你電腦上的一個文件,在這種情況下, NAME 應該是此文件的絕對路徑,包括文件名。默認值 os.path.join(BASE_DIR, 'db.sqlite3') 將會把數據庫文件儲存在項目的根目錄。

      如果你不使用 SQLite,則必須添加一些額外設置,比如 USER 、 PASSWORD 、 HOST 等等。想了解更多數據庫設置方面的內容,請看文檔:DATABASES 。

      SQLite 以外的其它數據庫

      如果你使用了 SQLite 以外的數據庫,請確認在使用前已經創(chuàng)建了數據庫。你可以通過在你的數據庫交互式命令行中使用 "CREATE DATABASE database_name;" 命令來完成這件事。

      另外,還要確保該數據庫用戶中提供 mysite/settings.py 具有 "create database" 權限。這使得自動創(chuàng)建的 test database 能被以后的教程使用。

      如果你使用 SQLite,那么你不需要在使用前做任何事——數據庫會在需要的時候自動創(chuàng)建。

      編輯 mysite/settings.py 文件前,先設置 TIME_ZONE 為你自己時區(qū)。

      此外,關注一下文件頭部的 INSTALLED_APPS 設置項。這里包括了會在你項目中啟用的所有 Django 應用。應用能在多個項目中使用,你也可以打包并且發(fā)布應用,讓別人使用它們。

      通常, INSTALLED_APPS 默認包括了以下 Django 的自帶應用:

      這些應用被默認啟用是為了給常規(guī)項目提供方便。

      默認開啟的某些應用需要至少一個數據表,所以,在使用他們之前需要在數據庫中創(chuàng)建一些表。請執(zhí)行以下命令:

      $ python manage.py migrate
      
      ...\> py manage.py migrate
      

      這個 migrate 命令檢查 INSTALLED_APPS 設置,為其中的每個應用創(chuàng)建需要的數據表,至于具體會創(chuàng)建什么,這取決于你的 mysite/settings.py 設置文件和每個應用的數據庫遷移文件(我們稍后會介紹這個)。這個命令所執(zhí)行的每個遷移操作都會在終端中顯示出來。如果你感興趣的話,運行你數據庫的命令行工具,并輸入 \dt (PostgreSQL), SHOW TABLES; (MySQL), .schema (SQLite)或者 SELECT TABLE_NAME FROM USER_TABLES; (Oracle) 來看看 Django 到底創(chuàng)建了哪些表。

      寫給極簡主義者

      就像之前說的,為了方便大多數項目,我們默認激活了一些應用,但并不是每個人都需要它們。如果你不需要某個或某些應用,你可以在運行 migrate 前毫無顧慮地從 INSTALLED_APPS 里注釋或者刪除掉它們。 migrate 命令只會為在 INSTALLED_APPS 里聲明了的應用進行數據庫遷移。

      創(chuàng)建模型?

      在 Django 里寫一個數據庫驅動的 Web 應用的第一步是定義模型 - 也就是數據庫結構設計和附加的其它元數據。

      設計哲學

      模型是真實數據的簡單明確的描述。它包含了儲存的數據所必要的字段和行為。Django 遵循 DRY Principle 。它的目標是你只需要定義數據模型,然后其它的雜七雜八代碼你都不用關心,它們會自動從模型生成。

      來介紹一下遷移 - 舉個例子,不像 Ruby On Rails,Django 的遷移代碼是由你的模型文件自動生成的,它本質上只是個歷史記錄,Django 可以用它來進行數據庫的滾動更新,通過這種方式使其能夠和當前的模型匹配。

      在這個簡單的投票應用中,需要創(chuàng)建兩個模型:問題 Question 和選項 Choice。Question 模型包括問題描述和發(fā)布時間。Choice 模型有兩個字段,選項描述和當前得票數。每個選項屬于一個問題。

      這些概念可以通過一個簡單的 Python 類來描述。按照下面的例子來編輯 polls/models.py 文件:

      polls/models.py?
      from django.db import models
      
      
      class Question(models.Model):
          question_text = models.CharField(max_length=200)
          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.db.models.Model 類的子類。每個模型有一些類變量,它們都表示模型里的一個數據庫字段。

      每個字段都是 Field 類的實例 - 比如,字符字段被表示為 CharField ,日期時間字段被表示為 DateTimeField 。這將告訴 Django 每個字段要處理的數據類型。

      每個 Field 類實例變量的名字(例如 question_textpub_date )也是字段名,所以最好使用對機器友好的格式。你將會在 Python 代碼里使用它們,而數據庫會將它們作為列名。

      你可以使用可選的選項來為 Field 定義一個人類可讀的名字。這個功能在很多 Django 內部組成部分中都被使用了,而且作為文檔的一部分。如果某個字段沒有提供此名稱,Django 將會使用對機器友好的名稱,也就是變量名。在上面的例子中,我們只為 Question.pub_date 定義了對人類友好的名字。對于模型內的其它字段,它們的機器友好名也會被作為人類友好名使用。

      定義某些 Field 類實例需要參數。例如 CharField 需要一個 max_length 參數。這個參數的用處不止于用來定義數據庫結構,也用于驗證數據,我們稍后將會看到這方面的內容。

      Field 也能夠接收多個可選參數;在上面的例子中:我們將 votesdefault 也就是默認值,設為0。

      注意在最后,我們使用 ForeignKey 定義了一個關系。這將告訴 Django,每個 Choice 對象都關聯(lián)到一個 Question 對象。Django 支持所有常用的數據庫關系:多對一、多對多和一對一。

      激活模型?

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

      • 為這個應用創(chuàng)建數據庫 schema(生成 CREATE TABLE 語句)。
      • 創(chuàng)建可以與 QuestionChoice 對象進行交互的 Python 數據庫 API。

      但是首先得把 polls 應用安裝到我們的項目里。

      設計哲學

      Django 應用是“可插拔”的。你可以在多個項目中使用同一個應用。除此之外,你還可以發(fā)布自己的應用,因為它們并不會被綁定到當前安裝的 Django 上。

      為了在我們的工程中包含這個應用,我們需要在配置類 INSTALLED_APPS 中添加設置。因為 PollsConfig 類寫在文件 polls/apps.py 中,所以它的點式路徑是 'polls.apps.PollsConfig'。在文件 mysite/settings.pyINSTALLED_APPS 子項添加點式路徑后,它看起來像這樣:

      mysite/settings.py?
      INSTALLED_APPS = [
          'polls.apps.PollsConfig',
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
      ]
      

      現在你的 Django 項目會包含 polls 應用。接著運行下面的命令:

      $ python manage.py makemigrations polls
      
      ...\> py manage.py makemigrations polls
      

      你將會看到類似于下面這樣的輸出:

      Migrations for 'polls':
        polls/migrations/0001_initial.py:
          - Create model Choice
          - Create model Question
          - Add field question to choice
      

      通過運行 makemigrations 命令,Django 會檢測你對模型文件的修改(在這種情況下,你已經取得了新的),并且把修改的部分儲存為一次 遷移

      遷移是 Django 對于模型定義(也就是你的數據庫結構)的變化的儲存形式 - 沒那么玄乎,它們其實也只是一些你磁盤上的文件。如果你想的話,你可以閱讀一下你模型的遷移數據,它被儲存在 polls/migrations/0001_initial.py 里。別擔心,你不需要每次都閱讀遷移文件,但是它們被設計成人類可讀的形式,這是為了便于你手動修改它們。

      Django 有一個自動執(zhí)行數據庫遷移并同步管理你的數據庫結構的命令 - 這個命令是 migrate,我們馬上就會接觸它 - 但是首先,讓我們看看遷移命令會執(zhí)行哪些 SQL 語句。sqlmigrate 命令接收一個遷移的名稱,然后返回對應的 SQL:

      $ python manage.py sqlmigrate polls 0001
      
      ...\> py manage.py sqlmigrate polls 0001
      

      你將會看到類似下面這樣的輸出(我把輸出重組成了人類可讀的格式):

      BEGIN;
      --
      -- Create model Choice
      --
      CREATE TABLE "polls_choice" (
          "id" serial NOT NULL PRIMARY KEY,
          "choice_text" varchar(200) NOT NULL,
          "votes" integer NOT NULL
      );
      --
      -- Create model Question
      --
      CREATE TABLE "polls_question" (
          "id" serial NOT NULL PRIMARY KEY,
          "question_text" varchar(200) NOT NULL,
          "pub_date" timestamp with time zone NOT NULL
      );
      --
      -- Add field question to choice
      --
      ALTER TABLE "polls_choice" ADD COLUMN "question_id" integer NOT NULL;
      ALTER TABLE "polls_choice" ALTER COLUMN "question_id" DROP DEFAULT;
      CREATE INDEX "polls_choice_7aa0f6ee" ON "polls_choice" ("question_id");
      ALTER TABLE "polls_choice"
        ADD CONSTRAINT "polls_choice_question_id_246c99a640fbbd72_fk_polls_question_id"
          FOREIGN KEY ("question_id")
          REFERENCES "polls_question" ("id")
          DEFERRABLE INITIALLY DEFERRED;
      
      COMMIT;
      

      請注意以下幾點:

      • 輸出的內容和你使用的數據庫有關,上面的輸出示例使用的是 PostgreSQL。
      • 數據庫的表名是由應用名(polls)和模型名的小寫形式( questionchoice)連接而來。(如果需要,你可以自定義此行為。)
      • 主鍵(IDs)會被自動創(chuàng)建。(當然,你也可以自定義。)
      • 默認的,Django 會在外鍵字段名后追加字符串 "_id" 。(同樣,這也可以自定義。)
      • 外鍵關系由 FOREIGN KEY 生成。你不用關心 DEFERRABLE 部分,它只是告訴 PostgreSQL,請在事務全都執(zhí)行完之后再創(chuàng)建外鍵關系。
      • 生成的 SQL 語句是為你所用的數據庫定制的,所以那些和數據庫有關的字段類型,比如 auto_increment (MySQL)、 serial (PostgreSQL)和 integer primary key autoincrement (SQLite),Django 會幫你自動處理。那些和引號相關的事情 - 例如,是使用單引號還是雙引號 - 也一樣會被自動處理。
      • 這個 sqlmigrate 命令并沒有真正在你的數據庫中的執(zhí)行遷移 - 它只是把命令輸出到屏幕上,讓你看看 Django 認為需要執(zhí)行哪些 SQL 語句。這在你想看看 Django 到底準備做什么,或者當你是數據庫管理員,需要寫腳本來批量處理數據庫時會很有用。

      如果你感興趣,你也可以試試運行 python manage.py check ;這個命令幫助你檢查項目中的問題,并且在檢查過程中不會對數據庫進行任何操作。

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

      $ python manage.py migrate
      Operations to perform:
        Apply all migrations: admin, auth, contenttypes, polls, sessions
      Running migrations:
        Rendering model states... DONE
        Applying polls.0001_initial... OK
      
      ...\> py manage.py migrate
      Operations to perform:
        Apply all migrations: admin, auth, contenttypes, polls, sessions
      Running migrations:
        Rendering model states... DONE
        Applying polls.0001_initial... OK
      

      這個 migrate 命令選中所有還沒有執(zhí)行過的遷移(Django 通過在數據庫中創(chuàng)建一個特殊的表 django_migrations 來跟蹤執(zhí)行過哪些遷移)并應用在數據庫上 - 也就是將你對模型的更改同步到數據庫結構上。

      遷移是非常強大的功能,它能讓你在開發(fā)過程中持續(xù)的改變數據庫結構而不需要重新刪除和創(chuàng)建表 - 它專注于使數據庫平滑升級而不會丟失數據。我們會在后面的教程中更加深入的學習這部分內容,現在,你只需要記住,改變模型需要這三步:

      數據庫遷移被分解成生成和應用兩個命令是為了讓你能夠在代碼控制系統(tǒng)上提交遷移數據并使其能在多個應用里使用;這不僅僅會讓開發(fā)更加簡單,也給別的開發(fā)者和生產環(huán)境中的使用帶來方便。

      通過閱讀文檔 Django 后臺文檔 ,你可以獲得關于 manage.py 工具的更多信息。

      初試 API?

      現在讓我們進入交互式 Python 命令行,嘗試一下 Django 為你創(chuàng)建的各種 API。通過以下命令打開 Python 命令行:

      $ python manage.py shell
      
      ...\> py manage.py shell
      

      我們使用這個命令而不是簡單的使用 "Python" 是因為 manage.py 會設置 DJANGO_SETTINGS_MODULE 環(huán)境變量,這個變量會讓 Django 根據 mysite/settings.py 文件來設置 Python 包的導入路徑。

      當你成功進入命令行后,來試試 database API 吧:

      >>> from polls.models import Choice, Question  # Import the model classes we just wrote.
      
      # No questions are in the system yet.
      >>> Question.objects.all()
      <QuerySet []>
      
      # Create a new Question.
      # Support for time zones is enabled in the default settings file, so
      # Django expects a datetime with tzinfo for pub_date. Use timezone.now()
      # instead of datetime.datetime.now() and it will do the right thing.
      >>> from django.utils import timezone
      >>> q = Question(question_text="What's new?", pub_date=timezone.now())
      
      # Save the object into the database. You have to call save() explicitly.
      >>> q.save()
      
      # Now it has an ID.
      >>> q.id
      1
      
      # Access model field values via Python attributes.
      >>> q.question_text
      "What's new?"
      >>> q.pub_date
      datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>)
      
      # Change values by changing the attributes, then calling save().
      >>> q.question_text = "What's up?"
      >>> q.save()
      
      # objects.all() displays all the questions in the database.
      >>> Question.objects.all()
      <QuerySet [<Question: Question object (1)>]>
      

      等等。<Question: Question object (1)> 對于我們了解這個對象的細節(jié)沒什么幫助。讓我們通過編輯 Question 模型的代碼(位于 polls/models.py 中)來修復這個問題。給 QuestionChoice 增加 __str__() 方法。

      polls/models.py?
      from django.db import models
      
      class Question(models.Model):
          # ...
          def __str__(self):
              return self.question_text
      
      class Choice(models.Model):
          # ...
          def __str__(self):
              return self.choice_text
      

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

      注意:這些都是常規(guī)的 Python方法。讓我們添加一個自定義的方法,這只是為了演示:

      polls/models.py?
      import datetime
      
      from django.db import models
      from django.utils import timezone
      
      
      class Question(models.Model):
          # ...
          def was_published_recently(self):
              return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
      

      新加入的 import datetimefrom django.utils import timezone 分別導入了 Python 的標準 datetime 模塊和 Django 中和時區(qū)相關的 django.utils.timezone 工具模塊。如果你不太熟悉 Python 中的時區(qū)處理,看看 時區(qū)支持文檔 吧。

      保存文件然后通過 python manage.py shell 命令再次打開 Python 交互式命令行:

      >>> from polls.models import Choice, Question
      
      # Make sure our __str__() addition worked.
      >>> Question.objects.all()
      <QuerySet [<Question: What's up?>]>
      
      # Django provides a rich database lookup API that's entirely driven by
      # keyword arguments.
      >>> Question.objects.filter(id=1)
      <QuerySet [<Question: What's up?>]>
      >>> Question.objects.filter(question_text__startswith='What')
      <QuerySet [<Question: What's up?>]>
      
      # Get the question that was published this year.
      >>> from django.utils import timezone
      >>> current_year = timezone.now().year
      >>> Question.objects.get(pub_date__year=current_year)
      <Question: What's up?>
      
      # Request an ID that doesn't exist, this will raise an exception.
      >>> Question.objects.get(id=2)
      Traceback (most recent call last):
          ...
      DoesNotExist: Question matching query does not exist.
      
      # Lookup by a primary key is the most common case, so Django provides a
      # shortcut for primary-key exact lookups.
      # The following is identical to Question.objects.get(id=1).
      >>> Question.objects.get(pk=1)
      <Question: What's up?>
      
      # Make sure our custom method worked.
      >>> q = Question.objects.get(pk=1)
      >>> q.was_published_recently()
      True
      
      # Give the Question a couple of Choices. The create call constructs a new
      # Choice object, does the INSERT statement, adds the choice to the set
      # of available choices and returns the new Choice object. Django creates
      # a set to hold the "other side" of a ForeignKey relation
      # (e.g. a question's choice) which can be accessed via the API.
      >>> q = Question.objects.get(pk=1)
      
      # Display any choices from the related object set -- none so far.
      >>> q.choice_set.all()
      <QuerySet []>
      
      # Create three choices.
      >>> 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)
      
      # Choice objects have API access to their related Question objects.
      >>> c.question
      <Question: What's up?>
      
      # And vice versa: Question objects get access to Choice objects.
      >>> q.choice_set.all()
      <QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
      >>> q.choice_set.count()
      3
      
      # The API automatically follows relationships as far as you need.
      # Use double underscores to separate relationships.
      # This works as many levels deep as you want; there's no limit.
      # Find all Choices for any question whose pub_date is in this year
      # (reusing the 'current_year' variable we created above).
      >>> Choice.objects.filter(question__pub_date__year=current_year)
      <QuerySet [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>]>
      
      # Let's delete one of the choices. Use delete() for that.
      >>> c = q.choice_set.filter(choice_text__startswith='Just hacking')
      >>> c.delete()
      

      閱讀 訪問關系對象 文檔可以獲取關于數據庫關系的更多內容。想知道關于雙下劃線的更多用法,參見 查找字段 文檔。數據庫 API 的所有細節(jié)可以在 數據庫 API 參考 文檔中找到。

      介紹 Django 管理頁面?

      設計哲學

      為你的員工或客戶生成一個用戶添加,修改和刪除內容的后臺是一項缺乏創(chuàng)造性和乏味的工作。因此,Django 全自動地根據模型創(chuàng)建后臺界面。

      Django 產生于一個公眾頁面和內容發(fā)布者頁面完全分離的新聞類站點的開發(fā)過程中。站點管理人員使用管理系統(tǒng)來添加新聞、事件和體育時訊等,這些添加的內容被顯示在公眾頁面上。Django 通過為站點管理人員創(chuàng)建統(tǒng)一的內容編輯界面解決了這個問題。

      管理界面不是為了網站的訪問者,而是為管理者準備的。

      創(chuàng)建一個管理員賬號?

      首先,我們得創(chuàng)建一個能登錄管理頁面的用戶。請運行下面的命令:

      $ python manage.py createsuperuser
      
      ...\> py manage.py createsuperuser
      

      鍵入你想要使用的用戶名,然后按下回車鍵:

      Username: admin
      

      然后提示你輸入想要使用的郵件地址:

      Email address: admin@example.com
      

      最后一步是輸入密碼。你會被要求輸入兩次密碼,第二次的目的是為了確認第一次輸入的確實是你想要的密碼。

      Password: **********
      Password (again): *********
      Superuser created successfully.
      

      啟動開發(fā)服務器?

      Django 的管理界面默認就是啟用的。讓我們啟動開發(fā)服務器,看看它到底是什么樣的。

      如果開發(fā)服務器未啟動,用以下命令啟動它:

      $ python manage.py runserver
      
      ...\> py manage.py runserver
      

      現在,打開瀏覽器,轉到你本地域名的 "/admin/" 目錄, -- 比如 " Django admin login screen

      因為 翻譯 功能默認是開著的,所以登錄界面可能會使用你的語言,取決于你瀏覽器的設置和 Django 是否擁有你語言的翻譯。

      進入管理站點頁面?

      現在,試著使用你在上一步中創(chuàng)建的超級用戶來登錄。然后你將會看到 Django 管理頁面的索引頁:

      Django admin index page

      你將會看到幾種可編輯的內容:組和用戶。它們是由 django.contrib.auth 提供的,這是 Django 開發(fā)的認證框架。

      向管理頁面中加入投票應用?

      但是我們的投票應用在哪呢?它沒在索引頁面里顯示。

      只需要做一件事:我們得告訴管理頁面,問題 Question 對象需要被管理。打開 polls/admin.py 文件,把它編輯成下面這樣:

      polls/admin.py?
      from django.contrib import admin
      
      from .models import Question
      
      admin.site.register(Question)
      

      體驗便捷的管理功能?

      現在我們向管理頁面注冊了問題 Question 類。Django 知道它應該被顯示在索引頁里:

      Django admin index page, now with polls displayed

      點擊 "Questions" 。現在看到是問題 "Questions" 對象的列表 "change list" 。這個界面會顯示所有數據庫里的問題 Question 對象,你可以選擇一個來修改。這里現在有我們在上一部分中創(chuàng)建的 “What's up?” 問題。

      Polls change list page

      點擊 “What's up?” 來編輯這個問題(Question)對象:

      Editing form for question object

      注意事項:

      • 這個表單是從問題 Question 模型中自動生成的
      • 不同的字段類型(日期時間字段 DateTimeField 、字符字段 CharField)會生成對應的 HTML 輸入控件。每個類型的字段都知道它們該如何在管理頁面里顯示自己。
      • 每個日期時間字段 DateTimeField 都有 JavaScript 寫的快捷按鈕。日期有轉到今天(Today)的快捷按鈕和一個彈出式日歷界面。時間有設為現在(Now)的快捷按鈕和一個列出常用時間的方便的彈出式列表。

      頁面的底部提供了幾個選項:

      • 保存(Save) - 保存改變,然后返回對象列表。
      • 保存并繼續(xù)編輯(Save and continue editing) - 保存改變,然后重新載入當前對象的修改界面。
      • 保存并新增(Save and add another) - 保存改變,然后添加一個新的空對象并載入修改界面。
      • 刪除(Delete) - 顯示一個確認刪除頁面。

      如果顯示的 “發(fā)布日期(Date Published)” 和你在 教程 1 里創(chuàng)建它們的時間不一致,這意味著你可能沒有正確的設置 TIME_ZONE 。改變設置,然后重新載入頁面看看是否顯示了正確的值。

      通過點擊 “今天(Today)” 和 “現在(Now)” 按鈕改變 “發(fā)布日期(Date Published)”。然后點擊 “保存并繼續(xù)編輯(Save and add another)”按鈕。然后點擊右上角的 “歷史(History)”按鈕。你會看到一個列出了所有通過 Django 管理頁面對當前對象進行的改變的頁面,其中列出了時間戳和進行修改操作的用戶名:

      History page for question object

      當你熟悉了數據庫 API 之后,你就可以開始閱讀 教程第 3 部分 ,下一部分我們將會學習如何為投票應用添加更多視圖。

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多