【Django】項目實例

Django框架

【簡介】:Python下有許多款不同的 Web 框架昨悼,Django是重量級的web框架中最有代表性的框架之一更舞。

下面介紹使用Pycharm圖形化界面創(chuàng)建 Django項目 抒蚜。

一玄组、創(chuàng)建Django項目

點擊file => new project創(chuàng)建新項目柜裸。選擇Django欄目炼吴,輸入項目名稱鹿鳖,這里采用mysite扁眯。選擇Python解釋器版本,點擊create創(chuàng)建翅帜。如圖:

第一步

【第二種方式】項目創(chuàng)建過程也可以這樣做:

teminal命令窗格 中通過命令安裝Django庫:

pip install django django-admin 
python manage.py startproject mysite

以及開始一個新的項目:

python manage.py startproject mysite

生成的目錄如下圖所示:


第二步
三姻檀、各文件和目錄的用途:

上圖為Django項目的根目錄。它包含了一系列自動生成的目錄和文件涝滴,具備各自專有的用途绣版。

  • 外層的mysite目錄與Django無關(guān),只是你項目的容器歼疮,可以任意命名杂抽;

  • manage.py:一個命令行工具,用于與Django進(jìn)行不同方式的交互腳本韩脏,非常重要缩麸,也是 Django的管理主程序;

  • 內(nèi)層的mysite/ 目錄是真正的項目文件包裹目錄赡矢,他的名字是你引用內(nèi)部文件的包明杭朱,例如: mysite.urls。 - mysite/init.py : 一個定義包的空文件吹散;

  • mysite/settings.py: 項目的主配置文件

  • mysite/urls.py: 路由文件痕檬,所有的任務(wù)都是從這里開始分配,相當(dāng)于Django驅(qū)動站點的內(nèi)容 表格送浊;

  • mysite.wsgi.py : 一個基于WSGI的web服務(wù)器進(jìn)入點,提供底層的網(wǎng)絡(luò)通信功能(通常不用care...)丘跌;


四袭景、創(chuàng)建APP

在每個Django項目中可以包含多個APP唁桩,相當(dāng)于一個大型項目中的分系統(tǒng),子模塊耸棒,功能部件等等荒澡,相互之間比較獨立,但也有聯(lián)系与殃。
APP應(yīng)用和project項目的區(qū)別:

  • 一個APP實現(xiàn)某個功能单山,比如博客,公共檔案數(shù)據(jù)庫或者見到的投票系統(tǒng) 幅疼;
  • 一個project是配置文件和多個APP的集合米奸,這里APP組合成整個站點 ;
  • 一個project可以包含多個APP 爽篷;
  • 一個APP可以屬于多個project悴晰;

【所有的APP能夠共享項目資源】

在 teminal 中通過命令創(chuàng)建APP:

 python manage.py startapp 文件
【第三步】

五、編寫路由

路由都在urls文件里面逐工,它將瀏覽器輸入的url映射到相應(yīng)的業(yè)務(wù)處理邏輯铡溪。如下所示:

from django.urls import path,include

urlpatterns = [
    path('user/', include("user.urls")),
    path("",include("blog.urls"))
]

六、運行web服務(wù)

在 teminal 中通過命令運行web.

 python manage.py runserver

七泪喊、使用靜態(tài)文件

前端三大塊 HTML棕硫,CSS,JS 還有各種插件在Django項目中存放袒啼,我們將這些文件統(tǒng)稱為“靜態(tài)文件”哈扮,因為 這些文件的內(nèi)容基本是固定不變的,不需要動態(tài)生成瘤泪,所以一般將靜態(tài)文件放在static目錄中(約定俗成的吧...)灶泵。
為了讓Django找到這個目錄,依然需要對settings進(jìn)行配置路徑对途。
例如:

// 配置靜態(tài)文件
STATIC_URL = '/static/'

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

然后在index.html文件中赦邻,引入js文件,項目寫到現(xiàn)在实檀,大概的項目文件目錄如下圖所示:


插入js文件

八惶洲、如何返回動態(tài)頁面

在網(wǎng)頁中,當(dāng)我們收到用戶產(chǎn)生的數(shù)據(jù)之后膳犹,通程衤溃可以根據(jù)數(shù)據(jù),進(jìn)行處理后返回動態(tài)頁面须床。

所以铐料,Django采用自己的模板語言,根據(jù)提供的數(shù)據(jù),替換掉HTML中的相應(yīng)部分钠惩。

【博客-用戶注冊界面】
在此html代碼中柒凉,采用Django模板語言進(jìn)行了替換。

{% extends 'base.html' %}
{% block title %} 微博客-用戶注冊 {% endblock %}
{% block content %}
    {% load widget_tweaks %}

    <div class="container">
        <div class="row">
            <div class="panel panel-default">
              <div class="panel-heading">
                用戶注冊
              </div>
              <div class="panel-body">
                  <form id="register_form" action="{% url 'user:register' %}" method="POST">
                      {% csrf_token %}
                      {% for field in form %}
                          <div class="form-group">
                              {{ field.label_tag }}
                              {% render_field field class="form-control" %}
                              {% if field.html_name == 'valid_code' %}
                              <a href="#" id="send_code_to_email">給郵箱發(fā)送驗證碼</a>
                              {% endif %}
                              {{ field.errors }}
                          </div>
                      {% endfor %}
                      <button type="submit" class="btn btn-primary pull-right">提交信息</button>
                  </form>
              </div>
            </div>
        </div>
    </div>
{% endblock %}

九篓跛、數(shù)據(jù)庫連接

(1)首先是注冊app(打開mysite/settings.py配置文件膝捞,這是整個Django項目的設(shè)置中心):

INSTALLED_APPS = [
    'user.apps.UserConfig',
    'blog.apps.BlogConfig',
    # django 自帶
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 第三方app
    'widget_tweaks'
]

雖然這一塊兒的內(nèi)容不用深究,但是終究要明白這是什么意思愧沟;
【補(bǔ)充】:

django.contrib.admin:admin管理后臺站點 
django.contrib.auth:身份認(rèn)證系統(tǒng) 
django.contrib.contenttypes:內(nèi)容類型框架 
django.contrib.sessions:會話框架 
django.contrib.messages:消息框架 
django.contrib.staticfiles:靜態(tài)文件管理框架

(2)在settings中蔬咬,配置數(shù)據(jù)庫相關(guān)的參數(shù)

# 數(shù)據(jù)庫連接
DATABASES = {
     'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'vblog',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

【注意】:確保你在settings文件中提供的數(shù)據(jù)庫用戶具有創(chuàng)建數(shù)據(jù)庫表的權(quán)限,因為在接下來沐寺,我們需要自動創(chuàng)建許多數(shù)據(jù)表林艘。

(3)編輯 models.py

【解釋】:Django通過自定義Python類的形式來定義具體的模型,每個模型的物理存在方式就是一個 Python的類Class芽丹,每個模型代表數(shù)據(jù)庫中的一張表北启,每個類的實例代表數(shù)據(jù)表中的一行數(shù)據(jù),類 中的每個變量代表數(shù)據(jù)表中的一列字段拔第。

【重點】:Django通過模型咕村,將Python代碼和數(shù)據(jù)庫操作結(jié)合起 來,實現(xiàn)對SQL查詢語言的封裝蚊俺。
如下代碼懈涛,實現(xiàn)了對User類的封裝。

from django.db import models
from django.utils import timezone
import hashlib

# Create your models here.
class User(models.Model):
    gender_choice = (
        (1, "男"), (0, "女")
    )
    user_name = models.CharField(verbose_name="用戶名", unique=True, null= False, max_length=100)
    password = models.CharField(verbose_name="密碼", null=False,max_length=200)
    gender = models.CharField(choices=gender_choice, max_length=2)
    email = models.EmailField(null=False, unique=True,max_length=100)
    tel = models.CharField(null=True, unique=True, max_length=20)
    create_time = models.DateTimeField(default=timezone.now)

    class Meta:
        db_table = 'tb_user'
        verbose_name = '用戶'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.user_name

    def save(self, force_insert=False, force_update=False, using=None,
             update_fields=None):
        self.password = hashlib.md5(self.password.encode("utf-8")).hexdigest()
        super().save()

Django通過ORM對數(shù)據(jù)庫進(jìn)行操作泳猬,奉行代碼優(yōu)先的理念批钠,將Python程序員和數(shù)據(jù)庫管理員進(jìn)行分工解耦。

(4)在 teminal 中通過命令創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表

 python manage.py makemigrations
 Python manage.py migrate 

【總結(jié)】:修改模型時的操作分三步:

  • 在models.py中修改模型得封;
  • 運行 python manage.py makemigrations 為改動創(chuàng)建遷移記錄埋心;
  • 運行 python manage.py migrate 將操作同步到數(shù)據(jù)庫。

(5)修改views.py中的業(yè)務(wù)邏輯

看圖忙上,如何將數(shù)據(jù)存入數(shù)據(jù)庫中拷呆。


修改業(yè)務(wù)邏輯

【最后】:重啟Web服務(wù)后,刷新頁面疫粥,之后和用戶交互的數(shù)據(jù)都能保存到數(shù)據(jù)庫中茬斧,任何時候都可以 從數(shù)據(jù)庫中讀取數(shù)據(jù),展示到頁面上梗逮。

python manage.py runserver

【成果展示】


大概就做到醬紫
Django-留言板作品

(留待更新...)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末项秉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子慷彤,更是在濱河造成了極大的恐慌娄蔼,老刑警劉巖怖喻,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異岁诉,居然都是意外死亡罢防,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門唉侄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人野建,你說我怎么就攤上這事属划。” “怎么了候生?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵同眯,是天一觀的道長。 經(jīng)常有香客問我唯鸭,道長须蜗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任目溉,我火速辦了婚禮明肮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘缭付。我一直安慰自己柿估,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布陷猫。 她就那樣靜靜地躺著秫舌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绣檬。 梳的紋絲不亂的頭發(fā)上足陨,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機(jī)與錄音娇未,去河邊找鬼墨缘。 笑死,一個胖子當(dāng)著我的面吹牛忘蟹,可吹牛的內(nèi)容都是我干的飒房。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼媚值,長吁一口氣:“原來是場噩夢啊……” “哼狠毯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起褥芒,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤嚼松,失蹤者是張志新(化名)和其女友劉穎嫡良,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體献酗,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡寝受,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了罕偎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片很澄。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颜及,靈堂內(nèi)的尸體忽然破棺而出甩苛,到底是詐尸還是另有隱情,我是刑警寧澤俏站,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布讯蒲,位于F島的核電站寄月,受9級特大地震影響挽封,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜韧掩,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一犯祠、第九天 我趴在偏房一處隱蔽的房頂上張望旭等。 院中可真熱鬧,春花似錦雷则、人聲如沸辆雾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽度迂。三九已至,卻和暖如春猜揪,著一層夾襖步出監(jiān)牢的瞬間惭墓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工而姐, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拴念。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓钧萍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親政鼠。 傳聞我的和親對象是個殘疾皇子风瘦,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,512評論 2 359