Django-01-創(chuàng)建項(xiàng)目,應(yīng)用及模型

根據(jù)官網(wǎng)的實(shí)例創(chuàng)建自己的項(xiàng)目及應(yīng)用
描述:實(shí)現(xiàn)一個項(xiàng)目進(jìn)度跟蹤功能。每個項(xiàng)目需要辦不同的證件,對這些證件的進(jìn)度進(jìn)行跟蹤。

環(huán)境:django 2.0 ; python 3.6


-----創(chuàng)建第一個項(xiàng)目,創(chuàng)建第一個app-----

1. 創(chuàng)建項(xiàng)目

命令:django-admin startproject mysite

創(chuàng)建名為mysite的項(xiàng)目,同時創(chuàng)建了該項(xiàng)目實(shí)例需要的設(shè)置項(xiàng)集合,包括數(shù)據(jù)庫配置、Django 配置和應(yīng)用程序配置等。

查看已創(chuàng)建項(xiàng)目的目錄如下:

mysite/ 
    manage.py 
    mysite/ 
        __init__.py 
        settings.py 
        urls.py 
        wsgi.py

這些目錄和文件的用處:

  • manage.py: 一個讓你用各種方式管理 Django 項(xiàng)目的命令行工具。
  • 里面一層的 mysite/ 目錄包含你的項(xiàng)目,它是一個純 Python 包。它的名字就是當(dāng)你引用它內(nèi)部任何東西時需要用到的 Python 包名。 (比如 mysite.urls).
  • mysite/settings.py:Django 項(xiàng)目的配置文件。
  • mysite/urls.py:Django 項(xiàng)目的 URL 聲明,就像網(wǎng)站的“目錄”。
  • mysite/wsgi.py:作為你的項(xiàng)目的運(yùn)行在 WSGI 兼容的Web服務(wù)器上的入口。

現(xiàn)在可以運(yùn)行 python manage.py runserver 來確認(rèn)項(xiàng)目是否創(chuàng)建成功。

2. 創(chuàng)建應(yīng)用

項(xiàng)目和應(yīng)用的區(qū)別:應(yīng)用是一個專門做某件事的網(wǎng)絡(luò)應(yīng)用程序——比如博客系統(tǒng),或者簡單的投票程序。項(xiàng)目則是一個網(wǎng)站使用的配置和應(yīng)用的集合。項(xiàng)目可以包含很多個應(yīng)用。應(yīng)用可以被很多個項(xiàng)目使用。

python manage.py startapp projtrack

這里創(chuàng)建一個名為projtrack的應(yīng)用。目錄結(jié)構(gòu)如下:

projtrack/ 
    __init__.py 
    admin.py 
    apps.py 
    migrations/ 
        __init__.py 
    models.py 
    tests.py 
    views.py
3. 編寫視圖

projtrack/views.py中創(chuàng)建視圖index,代碼如下:

from django.http import HttpResponse
def index(request):
    return HttpResponse("Hello, world. You're at the index.")

然后在projtrack新建urls.py,在其中創(chuàng)建url對應(yīng)視圖的關(guān)系

from django.urls import path
from . import views
urlpatterns = [
    path('', views.index, name='index'),
]

下一步需要在根 URLconf 文件中添加指向projtrack.urls的路徑。在 mysite/urls.py 文件的 urlpatterns 列表里插入一個 include(), 即:

mysite/urls.py中添加:path('projtrack/', include('projtrack.urls'))


-----初始化數(shù)據(jù)庫,創(chuàng)建第一個模型----

1. 初始化數(shù)據(jù)庫

打開 mysite/settings.py, 其中DATABASES 'default'顯示數(shù)據(jù)庫的配置。默認(rèn)為sqlite3,這里使用默認(rèn)的數(shù)據(jù)庫配置。

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

中國:TIME_ZONE = 'Asia/Shanghai'

查看INSTALLED_APPS, 默認(rèn)包括了Django的自帶應(yīng)用,在使用他們之前需要在數(shù)據(jù)庫中創(chuàng)建一些表。使用以下命令初始化數(shù)據(jù)庫:

python manage.py migrate

2. 創(chuàng)建模型

projtrack/models.py中創(chuàng)建模型。模型,也就是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)和附加的其它元數(shù)據(jù)。它包含了儲存的數(shù)據(jù)所必要的字段和行為。

我們先創(chuàng)建兩個模型:項(xiàng)目Project和進(jìn)度Schedule(每個項(xiàng)目會需要辦多個證件,這里進(jìn)度指的是每個證件的進(jìn)度)。

from django.db import models
from django.utils import timezone
from django.urls import reverse

class Project(models.Model):
    PROJECT_STATUS = (
        ('有效','有效'),
        ('作廢','作廢'),
    )
    def __str__(self):
        return self.project_name
    project_name = models.CharField(max_length=200)
    description = models.CharField(max_length=200)
    project_status = models.CharField(choices=PROJECT_STATUS, default='有效', max_length=200)
    cre_date = models.DateTimeField('date created', default=timezone.now, blank=True)


class Schedule(models.Model):
    def __str__(self):
        return self.schedule_text
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    schedule_text = models.CharField(default='', max_length=200)
    notes = models.CharField(default='', max_length=200, blank=True)
    edit_by = models.CharField(default='', max_length=200)
    modify_date = models.DateTimeField('date modified', default=timezone.now)

每個模型被表示為 django.db.models.Model 類的子類。每個模型有一些類變量,它們都表示模型里的一個數(shù)據(jù)庫字段。每個字段都是 Field 類的實(shí)例。

注意:

  • 數(shù)據(jù)庫的表名是由應(yīng)用名(projtrack)和模型名的小寫形式( project和 schedule)連接而來。(如果需要,也可以自定義此行為。)
  • 主鍵(IDs)會被自動創(chuàng)建。(當(dāng)然,也可以自定義。)
  • 默認(rèn)的,Django 會在外鍵字段名后追加字符串 "_id" 。(同樣,這也可以自定義。)
3. 激活模型

首先需要在工程中包含這個應(yīng)用,在mysite/settings.pyinstalled app中添加:
'projtrack.apps.ProjtrackConfig'

然后告訴django更改了模型,并進(jìn)行同步:
python3 manage.py makemigrations projtrack
通過運(yùn)行 makemigrations 命令,Django 會檢測你對模型文件的修改(在這種情況下,你已經(jīng)取得了新的),并且把修改的部分儲存為一次 遷移。

再運(yùn)行:
python3 manage.py migrate
migrate命令可以自動執(zhí)行數(shù)據(jù)庫遷移并同步管理你的數(shù)據(jù)庫結(jié)構(gòu)的命令

備注:項(xiàng)目更改過程中我更改過很多次數(shù)據(jù)庫結(jié)構(gòu)和字段,每次遷移會在projtrack/migrations下自動創(chuàng)建一個文件(相當(dāng)于一個記錄文件)。后來因?yàn)橛涗浱嘞雱h掉,于是先遷移回了0001_initial的狀態(tài)(運(yùn)行命令:python3 manage.py sqlmigrate projtrack 0001)。然后刪掉其它的記錄文件,再重新makemigrations, migrate遷移一次就可以了。


----django自動生成的admin頁面----

1.django后臺管理頁面

創(chuàng)建管理賬號
python manage.py createsuperuser
會提示輸入用戶名,郵箱和密碼

然后在projtrack/admin.py中注冊模型

admin.site.register(Project)
admin.site.register(Schedule)

啟動開發(fā)服務(wù)器:python manage.py runserver

登錄后臺頁面http://127.0.0.1:8000/admin可以看到Project和Schedule。可直接在后臺頁面添加project和schedule。

image.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容