整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          小白必看!Django 模板語言基礎(chǔ)來啦

          者 | 單雨

          責編 | 胡巍巍

          出品 | CSDN(ID:CSDNnews)

          前言

          為了實現(xiàn)模板封裝和復(fù)用,提高HTML界面調(diào)試便捷性以及前后端解耦等目標,Django定義了自己的網(wǎng)絡(luò)模板語言。

          當前介紹模板語言的官方文檔已經(jīng)非常完備,幾乎涵蓋了開發(fā)中需要用到的知識點和需要注意的問題,但同時官方文檔也存在一些問題:

          • 翻譯不夠完善,帶來閱讀的困難;

          • 一些知識點的介紹過于簡短,存在大量的頁內(nèi)鏈接,閱讀時需要跳轉(zhuǎn)到不同的頁面,閱讀不連貫。

          本文基于官方文檔系統(tǒng)介紹了Django模板語言的基礎(chǔ)知識點,方便快速了解Django模板語言。

          模板系統(tǒng)設(shè)計哲學(xué)

          Django的模板系統(tǒng)不是簡單的把Python嵌入到HTML中。

          它的設(shè)計宗旨是:模板系統(tǒng)旨在展示內(nèi)容, 而不是程序邏輯,因此不在HTML頁面中嵌入Python。

          簡單的說,模板只負責渲染數(shù)據(jù),大多數(shù)邏輯應(yīng)該交給視圖(view)進行處理。

          模板簡介

          模板是一個簡單的文本文件。它可以生成任何基于文本的格式(如 HTML,XML,CSV等)。除了基本的HTML標簽外,模板還包含兩種額外的元素——變量和標簽。

          模板中包含的變量可以被替換為變量的值,標簽則被替換為相應(yīng)的模板控制邏輯。示例:

          django

          {% extends "base_generic.html" %}

          {% block title %}{{ section.title }}{% endblock %}

          {% block content %}

          <h1>{{ section.title }}</h1>

          {% for story in story_list %}

          <h2>

          <a href="{{ story.get_absolute_url }}">

          {{ story.headline|upper }}

          </a>

          </h2>

          <p>{{ story.tease|truncatewords:"100" }}</p>

          {% endfor %}

          {% endblock %}

          `{{ section.title }}`在模板渲染時將會被變量的值替換,for標簽可以實現(xiàn)模板的循環(huán)渲染。

          基礎(chǔ)語法

          變量

          變量實現(xiàn)從模板上下文字典(返回HTTP響應(yīng)時傳遞過來的字典)中輸出一個值,這是一個類似于dict的對象,包含鍵值對。當模板引擎遇到一個變量時,它會計算該變量,并用結(jié)果替換它。

          變量名由字母、數(shù)字字符和下劃線("_")組成,但不能以下劃線開頭。點(".")也出現(xiàn)在變量中,代表屬性調(diào)用,變量名中不能有空格或標點符號。

          示例:

          django

          My first name is {{ first_name }}. My last name is {{ last_name }}.

          當傳入一個上下文字典`{'first_name': 'John', 'last_name': 'Doe'}`時,將會渲染得到:

          django

          My first name is John. My last name is Doe.

          模板中的變量被字典中的值替換了。

          變量還可以使用點表示法實現(xiàn)字典查找、屬性查找和列表索引查找等操作:

          django

          {{ my_dict.key }}

          {{ my_object.attribute }}

          {{ my_list.0 }}

          點表示法底層原理

          當模板系統(tǒng)遇到一個點,它會按順序嘗試下面的動作:

          1. 字典查詢

          2. 屬性或方法查找

          3. 數(shù)字索引查詢

          如果結(jié)果值是可調(diào)用的,則調(diào)用該值時將不帶參數(shù),調(diào)用的結(jié)果成為新的模板值。

          當進行能覆蓋字典查找的操作時,這種查找順序可能會造成一些意想不到的行為。例如:如果試圖循環(huán)一個collection .defaultdict字典對象:

          django

          {% for k, v in defaultdict.items %}

          {其他操作}

          {% endfor %}

          因為字典查找是首先發(fā)生的,所以這個行為會先提供一個默認值,而不是使用預(yù)期的.items方法。在這種情況下,應(yīng)該首先考慮使用字典查找,而不是使用字典的屬性調(diào)用。

          注意

          屬性通常被解釋為一個文本字符串,防止和同名的變量沖突。例如{{foo.bar}}中的屬性“bar”將被解釋為一個文本字符串,如果模板上下文中存在變量“bar”,則不會使用該變量的值。

          以下劃線開頭的變量屬性可能不能訪問,因為它們通常被認為是私有的。

          如果引用不存在的變量,模板系統(tǒng)將插入string_if_invalid選項的值,該選項默認設(shè)置為“”(空字符串)。

          標簽

          標簽在模板渲染過程中提供任意邏輯。標簽可以輸出內(nèi)容,作為控制結(jié)構(gòu),例如“if”語句或“for”循環(huán),從數(shù)據(jù)庫獲取內(nèi)容,甚至允許訪問其他模板標簽。

          (1)標簽聲明

          標簽的一般形式為:

          django

          {% tag %}

          示例:

          django

          {% csrf_token %}

          (2)傳入?yún)?shù)

          django

          {% cycle 'odd' 'even' %}

          (3)成對使用的標簽

          有些標簽需要開始和結(jié)束標簽:

          django

          {% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}

          (4)常用標簽

          for:循環(huán)數(shù)組中的每個元素. 比如, 顯示列表 `athlete_list` 中每個元素的 `name` 屬性。

          django

          <ul>

          {% for athlete in athlete_list %}

          <li>{{ athlete.name }}</li>

          {% endfor %}

          </ul>

          if 、elif和else:在上面,如果athlete_list不為空,則{{athlete_list|length}}變量將顯示運動員的數(shù)量。

          否則,如果athlete_in_locker_room_list不為空,則會顯示“Athletes should be out…”消息。如果兩個列表都為空,則顯示“No athletes”。

          也可以在if標簽里使用過濾器和各種操作符:

          django

          {% if athlete_list|length > 1 %}

          Team: {% for athlete in athlete_list %} ... {% endfor %}

          {% else %}

          Athlete: {{ athlete_list.0.name }}

          {% endif %}

          注意

          雖然上面的示例可以工作,但是要注意,大多數(shù)模板過濾器都返回字符串,因此使用過濾器進行數(shù)學(xué)比較通常不會正常工作,而長度是個例外。

          (5)更多

          Django有很多內(nèi)置標簽,更多關(guān)于內(nèi)置標簽的信息請參考官方文檔:

          https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/ref-templates-builtins-tags

          如果需要編寫自定義標簽,請參考官方文檔

          https://docs.djangoproject.com/zh-hans/2.2/howto/custom-template-tags/howto-writing-custom-template-tags

          如果需要對使用的標簽和自定義的標簽做一份說明文檔,可以使用Django提供的文檔工具,詳情請參考:

          https://docs.djangoproject.com/zh-hans/2.2/ref/contrib/admin/admindocs/

          過濾器

          簡介

          過濾器可以對變量做一些操作,例如給變量賦值,改變變量的值等。

          修改變量顯示

          過濾器可以修改變量的顯示。例如:

          django

          {{ name|lower }}

          通過過濾器lower變量{{ name }}變?yōu)榱诵懽址?,通過管道符(|)間隔變量和過濾器來使用過濾器。

          鏈式調(diào)用過濾器

          一個過濾器的輸出可以作為下一個過濾器的輸入。

          {{ text|escape|linebreaks }}是一種常用的轉(zhuǎn)換方式, 在這之后換行符被替換為了 <p> 標簽。

          轉(zhuǎn)換變量和標簽參數(shù)

          過濾器轉(zhuǎn)換變量和標簽參數(shù)的值。示例:

          django

          {{ django|title }}

          傳入`{'django': 'the web framework for perfecalist With deadline '}`上下文字典時,該模板呈現(xiàn)為:

          django

          The Web Framework For Perfectionists With Deadlines

          傳入?yún)?shù)給過濾器

          示例1:

          django

          {{ my_date|date:"Y-m-d" }}

          my_date將會被替換為當前日期。

          示例2:

          django

          {{ bio|truncatewords:30 }}

          將會會顯示 `bio` 變量的前30個字符

          注意

          過濾器參數(shù)中如果包含空格和標點符號,必須使用引號“”括起來,例如,要用逗號和空格連接列表,可以使用{{list|join:", "}}。

          Django提供了大約60個內(nèi)置模板過濾器,請參考官方文檔:

          https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/ref-templates-builtins-filters

          下面列舉一些常用的過濾器:

          default

          如果變量為false或空,則使用給定的默認值。否則,使用變量的值。例如:

          django

          {{ value|default:"nothing" }}

          如果 `value` 沒有提供或者為空,那么將它顯示為 "`nothing`" 。

          length

          返回值的長度。這對字符串和列表都適用。例如:

          django

          {{ value|length }}

          如果 `value` 為 `['a', 'b', 'c', 'd']`, 那么他將被顯示為 `4`。

          filesizeformat

          將值格式化為“人類可讀的”文件大小(即“13kb”、“4.1 MB”、“102字節(jié)”等)。例如:

          django

          {{ value|filesizeformat }}

          如果值為123456789,則輸出為117.7 MB。

          如果需要自定義過濾器,請參考請官方文檔:

          https://docs.djangoproject.com/zh-hans/2.2/howto/custom-template-tags/

          注釋

          示例:

          單行注釋

          django

          { this won't be rendered }

          多行注釋:{% comment %} 和{% endcomment %}

          django

          <p>Rendered text with {{ pub_date|date:"c" }}</p>

          {% comment "Optional note" %}

          <p>Commented out text with {{ create_date|date:"c" }}</p>

          {% endcomment %}

          注意:Comment標簽不能嵌套使用。

          作者簡介:單雨,90后工科男,偽文藝青年。目前就讀于北京理工大學(xué)宇航系,喜歡研究AI,網(wǎng)絡(luò)爬蟲,微信小程序以及機器人,癡迷于Coding,睡前必擼碼。

          【END】

          jango 是 Python API 開發(fā)中最流行的框架之一,在這個教程中,我們來學(xué)習如何使用它。-- Rachel Waston(作者)


          Django 所有 Web 框架中最全面的,也是最受歡迎的一個。自 2005 年以來,其流行度大幅上升。

          Django 是由 Django 軟件基金會維護,并且獲得了社區(qū)的大力支持,在全球擁有超過 11,600 名成員。在 Stack Overflow 上,約有 191,000 個帶 Django 標簽的問題。Spotify、YouTube 和 Instagram 等都使用 Django 來構(gòu)建應(yīng)用程序和數(shù)據(jù)管理。

          本文演示了一個簡單的 API,通過它可以使用 HTTP 協(xié)議的 GET 方法來從服務(wù)器獲取數(shù)據(jù)。

          構(gòu)建一個項目

          首先,為你的 Django 應(yīng)用程序創(chuàng)建一個目錄結(jié)構(gòu),你可以在系統(tǒng)的任何位置創(chuàng)建:

          $ mkdir myproject
          $ cd myproject

          然后,在項目目錄中創(chuàng)建一個虛擬環(huán)境來隔離本地包依賴關(guān)系:

          $ python3 -m venv env
          $ source env/bin/activate

          在 Windows 上,使用命令 env\Scripts\activate 來激活虛擬環(huán)境。

          安裝 Django 和 Django REST framework

          然后,安裝 Django 和 Django REST 模塊:

          $ pip3 install django
          $ pip3 install djangorestframework

          實例化一個新的 Django 項目

          現(xiàn)在你的應(yīng)用程序已經(jīng)有了一個工作環(huán)境,你必須實例化一個新的 Django 項目。與 Flask 這樣微框架不同的是,Django 有專門的命令來創(chuàng)建(注意第一條命令后的 . 字符)。

          $ django-admin startproject tutorial .
          $ cd tutorial
          $ django-admin startapp quickstart

          Django 使用數(shù)據(jù)庫來管理后端,所以你應(yīng)該在開始開發(fā)之前同步數(shù)據(jù)庫,數(shù)據(jù)庫可以通過 manage.py 腳本管理,它是在你運行 django-admin 命令時創(chuàng)建的。因為你現(xiàn)在在 tutorial 目錄,所以使用 ../ 符號來運行腳本,它位于上一層目錄:

          $ python3 ../manage.py makemigrations
          No changes detected
          $ python4 ../manage.py migrate
          Operations to perform:
          ??Apply all migrations: admin, auth, contenttypes, sessions
          Running migrations:
          ??Applying contenttypes.0001_initial... OK
          ??Applying auth.0001_initial... OK
          ??Applying admin.0001_initial... OK
          ??Applying admin.0002_logentry_remove_auto_add... OK
          ??Applying admin.0003_logentry_add_action_flag_choices... OK
          ??Applying contenttypes.0002_remove_content_type_name... OK
          ??Applying auth.0002_alter_permission_name_max_length... OK
          ??Applying auth.0003_alter_user_email_max_length... OK
          ??Applying auth.0004_alter_user_username_opts... OK
          ??Applying auth.0005_alter_user_last_login_null... OK
          ??Applying auth.0006_require_contenttypes_0002... OK
          ??Applying auth.0007_alter_validators_add_error_messages... OK
          ??Applying auth.0008_alter_user_username_max_length... OK
          ??Applying auth.0009_alter_user_last_name_max_length... OK
          ??Applying auth.0010_alter_group_name_max_length... OK
          ??Applying auth.0011_update_proxy_permissions... OK
          ??Applying sessions.0001_initial... OK

          在 Django 中創(chuàng)建用戶

          創(chuàng)建一個名為 admin,示例密碼為 password123 的初始用戶:

          $ python3 ../manage.py createsuperuser \
          ??--email admin@example.com \
          ??--username admin

          在提示時創(chuàng)建密碼。

          在 Django 中實現(xiàn)序列化和視圖

          為了使 Django 能夠?qū)⑿畔鬟f給 HTTP GET 請求,必須將信息對象轉(zhuǎn)化為有效的響應(yīng)數(shù)據(jù)。Django 為此實現(xiàn)了“序列化類” serializers。

          在你的項目中,創(chuàng)建一個名為 quickstart/serializers.py 的新模塊,使用它來定義一些序列化器,模塊將用于數(shù)據(jù)展示:

          from django.contrib.auth.models import User, Group
          from rest_framework import serializers
          
          class UserSerializer(serializers.HyperlinkedModelSerializer):
          ????class Meta:
          ????????model = User
          ????????fields = ['url', 'username', 'email', 'groups']
          
          class GroupSerializer(serializers.HyperlinkedModelSerializer):
          ????class Meta:
          ????????model = Group
          ????????fields = ['url', 'name']

          Django 中的 視圖 是一個接受 Web 請求并返回 Web 響應(yīng)的函數(shù)。響應(yīng)可以是 HTML、HTTP 重定向、HTTP 錯誤、JSON 或 XML 文檔、圖像或 TAR 文件,或者可以是從 Internet 獲得的任何其他內(nèi)容。要創(chuàng)建視圖,打開 quickstart/views.py 并輸入以下代碼。該文件已經(jīng)存在,并且其中包含一些示例文本,保留這些文本并將以下代碼添加到文件中:

          from django.contrib.auth.models import User, Group
          from rest_framework import viewsets
          from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
          
          class UserViewSet(viewsets.ModelViewSet):
          ????"""
          ????API 允許查看或編輯用戶
          ????"""
          ????queryset = User.objects.all().order_by('-date_joined')
          ????serializer_class = UserSerializer
          
          class GroupViewSet(viewsets.ModelViewSet):
          ????"""
          ????API 允許查看或編輯組
          ????"""
          ????queryset = Group.objects.all()
          ????serializer_class = GroupSerializer

          使用 Django 生成 URL

          現(xiàn)在,你可以生成 URL 以便人們可以訪問你剛起步的 API。在文本編輯器中打開 urls.py 并將默認示例代碼替換為以下代碼:

          from django.urls import include, path
          from rest_framework import routers
          from tutorial.quickstart import views
          
          router = routers.DefaultRouter()
          router.register(r'users', views.UserViewSet)
          router.register(r'groups', views.GroupViewSet)
          
          # 使用自動路由 URL
          # 還有登錄 URL
          urlpatterns = [
          ????path('', include(router.urls)),
          ????path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
          ]

          調(diào)整你的 Django 項目設(shè)置

          這個示例項目的設(shè)置模塊存儲在 tutorial/settings.py 中,因此在文本編輯器中將其打開,然后在 INSTALLED_APPS 列表的末尾添加 rest_framework:

          INSTALLED_APPS = [
          ????...
          ????'rest_framework',
          ]

          測試 Django API

          現(xiàn)在,你可以測試構(gòu)建的 API。首先,從命令行啟動內(nèi)置服務(wù)器:

          $ python3 manage.py runserver

          你可以通過使用 curl 導(dǎo)航至 URL http://localhost:8000/users 來訪問 API:

          $ curl --get http://localhost:8000/users/?format=json
          [{"url":"http://localhost:8000/users/1/?format=json","username":"admin","email":"admin@example.com","groups":[]}]

          使用 Firefox 或你選擇的 開源瀏覽器 :

          一個簡單的 Django API


          有關(guān)使用 Django 和 Python 的 RESTful API 的更多深入知識,參考出色的 Django 文檔 。

          為什么要使用 Djago?

          Django 的主要優(yōu)點:

          1. Django 社區(qū)的規(guī)模正在不斷擴大,因此即使你做一個復(fù)雜項目,也會有大量的指導(dǎo)資源。
          2. 默認包含模板、路由、表單、身份驗證和管理工具等功能,你不必尋找外部工具,也不必擔心第三方工具會引入兼容性問題。
          3. 用戶、循環(huán)和條件的簡單結(jié)構(gòu)使你可以專注于編寫代碼。
          4. 這是一個成熟且經(jīng)過優(yōu)化的框架,它非常快速且可靠。

          Django 的主要缺點:

          1. Django 很復(fù)雜!從開發(fā)人員視角的角度來看,它可能比簡單的框架更難學(xué)。
          2. Django 有一個很大的生態(tài)系統(tǒng)。一旦你熟悉它,這會很棒,但是當你深入學(xué)習時,它可能會令人感到無所適從。

          對你的應(yīng)用程序或 API 來說,Django 是絕佳選擇。下載并熟悉它,開始開發(fā)一個迷人的項目!


          via: https://opensource.com/article/19/11/python-web-api-django

          作者: Rachel Waston 選題: lujun9972 譯者: MjSeven 校對: wxy

          本文由 LCTT 原創(chuàng)編譯, Linux中國 榮譽推出

          點擊“了解更多”可訪問文內(nèi)鏈接

          者:HelloGitHub-追夢人物

          我們已經(jīng)成功地開發(fā)了一個功能比較完備的個人博客,是時候來總結(jié)一下我們的工作了。博客系列完整的源代碼地址:

          https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial

          • 在教程的前兩篇,我們介紹了如何搭建 django 開發(fā)環(huán)境,如何創(chuàng)建 django 項目以及 django 應(yīng)用,這是我們進行 django 項目開發(fā)的基礎(chǔ)。
          • 第 3、4 篇:講了 django ORM 的基礎(chǔ)操作。ORM 是 django 核心中的核心,不僅 django 自帶的應(yīng)用底層全都依賴于 ORM,大部分使用 django 構(gòu)建的應(yīng)用基本也離不開 django ORM 的操作,所以能否熟練掌握 django 的 ORM API 決定了能否寫出高質(zhì)量、高性能的 django 應(yīng)用。
          • 第 5、6 篇:講解了 django 基本的視圖函數(shù),視圖函數(shù)的作用是接收一個 HTTP 請求,根據(jù)這個請求的意圖返回相應(yīng)的 HTTP 響應(yīng)。在這個請求處理的過程中,通常都會涉及到使用 ORM 進行數(shù)據(jù)庫的增刪改查操作。
          • 第 7 篇:介紹了 django 的殺手锏應(yīng)用,開箱即用的 Admin 管理臺。我們可以通過這個管理臺直接對數(shù)據(jù)庫中的數(shù)據(jù)進行增刪改查操作。
          • 第 9、10 篇:介紹了 Markdown 的使用,對于博客、技術(shù)論壇之類的應(yīng)用,使用 Markdown 來撰寫內(nèi)容是一個常見的需求。
          • 第 12、13 篇:介紹了如何自定義模板標簽并使用它們。模板標簽用于 django 的模板系統(tǒng)中,用來生成 HTML 頁面。django 的模板系統(tǒng)自帶了大量的模板標簽。但如果自帶的標簽不滿足需求,我們就可以拓展 django 模板系統(tǒng)的 API 來自定義模板標簽。
          • 第 14 篇:我們利用上述學(xué)習到的知識開發(fā)了一個獨立的 django 評論應(yīng)用。這里面我們還初步接觸了表單的使用。django 的表單是對 HTML 表單的封裝,它在后臺完成數(shù)據(jù)校驗、清理等功能,并對非法的表單輸入返回給客戶端友好的錯誤提示。
          • 第 16、17、18、19:向大家介紹了運維方面的知識,包括如何在服務(wù)器上部署 django 應(yīng)用,如何編寫自動化腳本來全自動部署,如何給網(wǎng)站開啟 HTTPS 以提高安全性。特別是使用 Docker 進行部署后,我們把整個 django 部署的過程縮減到只需線上執(zhí)行幾條命令就能完成,Docker 幫助我們極大簡化了部署流程。
          • 第 21 篇:我們介紹了基于類的視圖和通用類視圖。之前說了,django 的視圖本質(zhì)上是一個函數(shù),它接收一個 HTTP 請求,返回一個 HTTP 響應(yīng)。類視圖雖然是一個類,但這只是針對開發(fā)者而言,django 通過 Python 魔法將類轉(zhuǎn)化為一個可被調(diào)用的函數(shù)。使用類的好處是,它允許被繼承,因此在某些情況下可以提高代碼的復(fù)用性。
          • 第 22 篇:演示了如何在 Python 腳本里面獨立地使用 django 的 ORM。一般要使用 django 的 ORM 必須啟動整個 django 項目,而如果要在獨立的腳本中使用的話,就必須進行一些額外的設(shè)置。
          • 第 23 篇:我們介紹了如何使用 django 第三方庫,django 的強大不僅在于它自身功能的完備程度,更在于其繁榮的社區(qū)。大量開發(fā)者在開源平臺發(fā)布了很多優(yōu)質(zhì)的 django 拓展應(yīng)用,涵蓋了 web 開發(fā)的方方面面。這里我們只介紹了一個分頁應(yīng)用,更多應(yīng)用大家可以在 GitHub 通過搜索關(guān)鍵詞 django 進行探索。
          • 第 27、28 篇:我們介紹了搜索功能的實現(xiàn)。一開始使用的是比較簡單的搜索方式,利用之前所學(xué)的 django 知識就能完成。不過為了更好的搜索體驗,我們進一步引入了 elasticsearch 這個專業(yè)的搜索服務(wù)來提供搜索功能,同時使用了一個 django 第三方庫 django-haystack 來將 elasticsearch 和 django 無縫對接。同時可以看到,有了 Docker 容器技術(shù),引入一個外部服務(wù)變得非常簡單。
          • 第 29、30、31 篇:我們對博客補充了完善的單元測試,測試過程中我們發(fā)現(xiàn)了一些隱藏的 bug 并進行了修復(fù),由此測試的重要性可見一斑。此外,為了衡量測試的質(zhì)量,我們使用 coverage.py 對代碼測試覆蓋率進行了統(tǒng)計,越高的測試覆蓋率說明測試越充分,程序出現(xiàn) bug 的幾率也就越小。

          現(xiàn)在,我們已經(jīng)有了一個功能比較完備的個人博客應(yīng)用。而且,在測試的保障護航下,我們可以在不破壞現(xiàn)用功能的情況下,輕松加入新的功能。

          教程進行到這里,HelloDjango 博客教程就要準備告一段落了,大部分 web 開發(fā)中的需求,你都可以通過教程中講到的知識點,結(jié)合 django 的官方文檔來實現(xiàn)。

          不過,真的要結(jié)束了嗎?我的回答是沒有也不想結(jié)束!

          Django 中還有很多值得介紹的地方,就拿博客來說,我們還可以做這些很酷的功能:

          • 支持用戶登錄,甚至使用 GitHub、新浪微博等第三方應(yīng)用登錄
          • 支持多級評論
          • 國際化
          • 使用緩存進行性能優(yōu)化
          • 支持郵件訂閱,有新的博客就發(fā)送郵件提醒訂閱者

          等等,這些對于其他 Web 系統(tǒng)來說,基本也都是必不可少的。

          所以,HelloDjango 博客項目會繼續(xù)以這樣的形式繼續(xù)下去:

          圍繞著某一個功能進行開發(fā),功能開發(fā)完成之后附帶輸出一篇詳細介紹功能實現(xiàn)原理和過程的教程。我希望 HelloDjango 博客項目不僅僅是一個教學(xué)演示項目,也不僅僅是一個高質(zhì)量、功能完備的 django 第三方博客應(yīng)用,而是兩者都是!

          號外

          此外,雖然 HelloDjango 博客項目教程定期更新已經(jīng)結(jié)束,但接下來我會開始以定期更新的方式向大家介紹如何 django-restframework + Vue 或者 React 這種更加現(xiàn)代化的前后端分離開發(fā)方式,大量公司都采用這種開發(fā)方式,如果你以找工作為目的而學(xué)習 django 的話,怎么能不學(xué)習這種開發(fā)模式呢?

          HelloDjango-blogs 的教程暫時告一段落,全新的 HelloDjango-django-restframework 系列教程就要要重新?lián)P帆起航了,大家敬請期待!

          『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發(fā)起者不再孤單。跟著我們的文章,你會發(fā)現(xiàn)編程的樂趣、使用和發(fā)現(xiàn)參與開源項目如此簡單。歡迎聯(lián)系我、加入我們,讓更多人愛上開源、貢獻開源~


          主站蜘蛛池模板: 一区二区三区高清在线| 久久精品无码一区二区三区| 在线免费一区二区| 中文字幕Av一区乱码| 中文字幕人妻AV一区二区| 久久久久国产一区二区| 无码人妻一区二区三区兔费| 国产日韩高清一区二区三区 | 上原亚衣一区二区在线观看| 在线观看国产一区亚洲bd| 麻豆果冻传媒2021精品传媒一区下载| 精品少妇一区二区三区视频| 中文字幕国产一区| 一区二区三区四区无限乱码| 国产伦精品一区二区三区在线观看 | 亚洲av无码天堂一区二区三区| 国产精品日韩欧美一区二区三区| 日韩一区二区三区无码影院| 久久久无码精品国产一区 | 国产拳头交一区二区| 无码人妻av一区二区三区蜜臀| 精品一区二区ww| 欧美激情一区二区三区成人| 毛片一区二区三区无码| 国产精品无码一区二区三区免费| 天美传媒一区二区三区| 老鸭窝毛片一区二区三区| 国产激情精品一区二区三区| 中文字幕在线一区二区三区| 无码人妻品一区二区三区精99| 久久国产免费一区| 中文字幕精品一区二区2021年| 日本一区二三区好的精华液| 国产日韩精品一区二区在线观看播放 | 无码精品人妻一区二区三区中| 亚洲视频在线一区| 无码精品不卡一区二区三区| 小泽玛丽无码视频一区| 亚洲无线码一区二区三区| 人妻无码久久一区二区三区免费 | 国产精品一区二区香蕉|