目錄
一、項(xiàng)目的創(chuàng)建與運(yùn)行
1.創(chuàng)建項(xiàng)目
2.運(yùn)行
?二、應(yīng)用的創(chuàng)建和使用
1,創(chuàng)建一個應(yīng)用程序
2.編寫我們的第一個視圖
?三、項(xiàng)目的模型
1.連接MySQL數(shù)據(jù)庫設(shè)置
2.創(chuàng)建模型
3.激活模型
?4.使用(兩種)
(1)現(xiàn)在進(jìn)入交互式的Python shell,并使用Django提供的免費(fèi)API
(2)在myapp應(yīng)用的視圖中使用
四、啟用網(wǎng)站Admin管理
1.?數(shù)據(jù)遷移
?2.創(chuàng)建管理員用戶
3.啟動開發(fā)服務(wù)器
?4.設(shè)置時區(qū)和語言:
5.將我們自定義的應(yīng)用程序的加入到后臺管理
6.更深入設(shè)計(jì)后臺管理?
進(jìn)行本節(jié)內(nèi)容之前首先需要創(chuàng)建一個數(shù)據(jù)庫mydemo,和一個數(shù)據(jù)表stu:
CREATE TABLE `stu` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(16) NOT NULL,
`age` tinyint(3) unsigned NOT NULL DEFAULT '20',
`sex` enum('w','m') NOT NULL DEFAULT 'm',
`classid` char(8) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
填充數(shù)據(jù):
INSERT INTO `stu` VALUES (1,'zhangsan',20,'m','python02'),(2,'wangwu',22,'w','python03'),(3,'lisi',21,'m','python05'),(4,'zhaoliu',24,'w','python04'),(5,'xiaoli',23,'m','python02'),(6,'xiaowang',22,'w','python04'),(7,'wangdan',23,'m','python03'),(8,'wangxiaoya',22,'w','python04'),(9,'liwen',26,'w','python05'),(10,'lixiaoli',24,'m','python02');
一、項(xiàng)目的創(chuàng)建與運(yùn)行
1.創(chuàng)建項(xiàng)目
如果這是你第一次使用 Django 的話,你需要一些初始化設(shè)置。也就是說,你需要用一些自動生成的代碼配置一個 Django?project?—— 即一個 Django 項(xiàng)目實(shí)例需要的設(shè)置項(xiàng)集合,包括數(shù)據(jù)庫配置、Django 配置和應(yīng)用程序配置。
打開命令行,cd
?到一個你想放置你代碼的目錄,然后運(yùn)行以下命令:
...\> django-admin startproject myweb
?你的命令提示符需要以管理員身份運(yùn)行。
在你的目錄下就會自動生成一個myweb文件 。
讓我們看看?startproject?創(chuàng)建了些什么:
myweb/ manage.py myweb/ __init__.py settings.py urls.py asgi.py wsgi.py
這些目錄和文件的用處是:
- 最外層的?
myweb/
?根目錄只是你項(xiàng)目的容器, 根目錄名稱對 Django 沒有影響,你可以將它重命名為任何你喜歡的名稱。 -
manage.py
: 一個讓你用各種方式管理 Django 項(xiàng)目的命令行工具。你可以閱讀?django-admin 和 manage.py?獲取所有?manage.py
?的細(xì)節(jié)。 - 里面一層的?
myweb/
?目錄包含你的項(xiàng)目,它是一個純 Python 包。它的名字就是當(dāng)你引用它內(nèi)部任何東西時需要用到的 Python 包名。 (比如?myweb.urls
). -
myweb/__init__.py
:一個空文件,告訴 Python 這個目錄應(yīng)該被認(rèn)為是一個 Python 包。如果你是 Python 初學(xué)者,閱讀官方文檔中的?更多關(guān)于包的知識。 -
myweb/settings.py
:Django 項(xiàng)目的配置文件。如果你想知道這個文件是如何工作的,請查看?Django 配置?了解細(xì)節(jié)。 -
myweb/urls.py
:Django 項(xiàng)目的 URL 聲明,就像你網(wǎng)站的“目錄”。閱讀?URL調(diào)度器?文檔來獲取更多關(guān)于 URL 的內(nèi)容。 -
myweb/asgi.py
:作為你的項(xiàng)目的運(yùn)行在 ASGI 兼容的 Web 服務(wù)器上的入口。閱讀?如何使用 ASGI 來部署?了解更多細(xì)節(jié)。 -
myweb/wsgi.py
:作為你的項(xiàng)目的運(yùn)行在 WSGI 兼容的Web服務(wù)器上的入口。閱讀?如何使用 WSGI 進(jìn)行部署?了解更多細(xì)節(jié)。
2.運(yùn)行
讓我們來確認(rèn)一下你的 Django 項(xiàng)目是否真的創(chuàng)建成功了。如果你的當(dāng)前目錄不是外層的?mysite
?目錄的話,請切換到此目錄,然后運(yùn)行下面的命令:
...\> py manage.py runserver
?
?去網(wǎng)頁上運(yùn)行http://127.0.0.1:8000/
?
就會發(fā)現(xiàn)這個項(xiàng)目創(chuàng)建成功并且運(yùn)行了。
想要停止這個項(xiàng)目就在命令行進(jìn)行Ctrl+C操作:
?再去運(yùn)行成功的界面刷新就會發(fā)現(xiàn)網(wǎng)頁無法訪問。
?如果想要換端口,就輸入py manage.py runserver+端口。
?現(xiàn)在再去運(yùn)行http://127.0.0.1:8080/,就會發(fā)現(xiàn)可以成功運(yùn)行。
如果想要用ip地址訪問(也稱為遠(yuǎn)程訪問),需要在8080前加上0.0.0.0:
?查詢你的IP地址:輸入ipconfig
192.168.1.120就是你的ip地址,就發(fā)現(xiàn)可以訪問了,如果不加0.0.0.0:,直接訪問你就會發(fā)現(xiàn)無法訪問。
?二、應(yīng)用的創(chuàng)建和使用
1,創(chuàng)建一個應(yīng)用程序
Django自帶一個實(shí)用程序,可以自動生成應(yīng)用程序的基本目錄結(jié)構(gòu),因此您可以專注于編寫代碼而不是創(chuàng)建目錄。
要創(chuàng)建您的應(yīng)用程序,請確保您與目錄位于同一目錄,manage.py 并鍵入以下命令:
$ python manage.py startapp myapp
注:若當(dāng)前環(huán)境中有兩個python環(huán)境,可使用python3或python3.8命令來調(diào)用3.8的環(huán)境,如:
$ python3 manage.py startapp myapp
創(chuàng)建完成后就會發(fā)現(xiàn)多了一個myapp文件。
這將創(chuàng)建一個目錄myapp,其目錄如下:此目錄結(jié)構(gòu)將容納輪詢應(yīng)用程序。
[root@localhost demo]# tree myweb/
myweb/
├── manage.py
├── myweb
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── myapp
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.py
?admin.py是用于做后臺的;
apps.py是用于當(dāng)前應(yīng)用的;
migrations是用于做數(shù)據(jù)庫遷移操作的;
models.py是用于數(shù)據(jù)庫操作類的;
?tests.py是用于做測試的;
views.py是用于做視圖的;
2.編寫我們的第一個視圖
我們來寫第一個視圖。打開文件myapp/views.py 并放入以下Python代碼:
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the myapp index.")
這是Django中最簡單的視圖。要調(diào)用視圖,我們需要將其映射到一個URL - 為此,我們需要一個URLconf。
要在myapp目錄中創(chuàng)建一個URLconf,創(chuàng)建一個名為urls.py。您的應(yīng)用目錄應(yīng)該如下所示:
└── myapp
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
├── urls.py
└── views.py
在myapp/urls.py文件中包含以下代碼:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
下一步是將根URLconf指向myapp.urls模塊。 在 myweb/urls.py添加一條import用于django.conf.urls.include和插入include()的urlpatterns列表,所以你必須:
from django.contrib import admin
from django.urls import include,path
urlpatterns = [
#path('admin/', admin.site.urls),
path('myapp/', include('myapp.urls')),
]
其中include()函數(shù)允許引用其他URLconfs。請注意,該include()函數(shù)的正則表達(dá)式 沒有$(字符串匹配字符),而是尾部的斜杠。 每當(dāng)Django遇到時 include(),它會排除與該點(diǎn)匹配的任何部分,并將剩余的字符串發(fā)送到隨附的URLconf進(jìn)行進(jìn)一步處理。
背后的想法include()是使即插即用的URL變得容易。由于民意調(diào)查是在自己的URLconf(myapp/urls.py)中,它們可以被放置在“/ myapp /”下面,或者在“/ fun_myapp /”下面,或者在“/ content / myapp /”或其他路徑根目錄下,工作。
注:include()當(dāng)您包含其他網(wǎng)址格式時,您應(yīng)始終使用。 admin.site.urls是唯一的例外。
您現(xiàn)在已將index視圖連接到URLconf中。讓它驗(yàn)證它的工作,運(yùn)行以下命令:
$ python manage.py runserver 0.0.0.0:8000
在瀏覽器中轉(zhuǎn)到http://localhost:8000/myapp/,您應(yīng)該看到文本"Hello, world. You're at the myapp index."
?我的views.py里寫的是Hello World!。
溫馨提示:如果你用的是VScode,每改動一個地方都要Ctrl+S保存一下,不然是沒有效果的。
?三、項(xiàng)目的模型
1.連接MySQL數(shù)據(jù)庫設(shè)置
默認(rèn)情況下,配置使用SQLite。若不使用SQLite作為數(shù)據(jù)庫,則需要額外的設(shè)置,例如 USER,PASSWORD和HOST必須加入。
其中ENGINE設(shè)置為數(shù)據(jù)庫后端使用。內(nèi)置數(shù)據(jù)庫后端有:
- 'django.db.backends.postgresql'
- 'django.db.backends.mysql'
- 'django.db.backends.sqlite3'
- 'django.db.backends.oracle'
在myweb/settings.py文件中,通過DATABASES項(xiàng)進(jìn)行數(shù)據(jù)庫設(shè)置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydemo',
'USER': 'root',
'PASSWORD': '',
'HOST': 'localhost',
'PORT': '3306',
}
}
這里的用戶名和密碼是你的mysql的用戶名和密碼,NAME是你的數(shù)據(jù)庫的名字?
注意:Django使用MySQL數(shù)據(jù)庫需要加載 MySQLdb模塊,需要安裝 mysqlclient,若已經(jīng)安裝請略過。 (Django2.2版本之前我們安裝的是pymysql模塊,不過現(xiàn)在使用的mysqlclient )
$ pip install mysqlclient
下載到本地安裝:(解決安裝中的錯誤)?
- 執(zhí)行命令查看python版本與系統(tǒng)位數(shù)(32/64位)
* 訪問網(wǎng)址: https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
* 下載一個對應(yīng)的安裝包當(dāng)當(dāng)前系統(tǒng)目錄:
* 執(zhí)行安裝:
pip install mysqlclient?1.4.6?cp38?cp38?win32.whl
?下載的時候cp后面的對應(yīng)的是你的Python版本,我的是3.10所以應(yīng)該是cp310,后面的是你的電腦是win32,還是win64.
我的Python版本在官網(wǎng)上發(fā)現(xiàn)沒有cp310的,所以又去找了其他解決方法。
我安裝過程中出現(xiàn)的是error:no matching distribution found for mysqlclient,需要在pip install mysqlclient后面加?--default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple,
pip install mysqlclient --default-timeout=100 -i https://pypi.tuna.tsinghua.edu.cn/simple
然后就可以安裝成功了。
?裝完之后執(zhí)行pip list命令查看是否裝好了
?發(fā)現(xiàn)已經(jīng)有了mysqlclient。
2.創(chuàng)建模型
在我們的簡單的應(yīng)用程序中,去創(chuàng)建一個stu表信息操作的Model類。
編輯 myapp/models.py文件
from django.db import models
# Create your models here.
class Stu(models.Model):
'''自定義Stu表對應(yīng)的Model類'''
#定義屬性:默認(rèn)主鍵自增id字段可不寫
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16)
age = models.SmallIntegerField()
sex = models.CharField(max_length=1)
classid=models.CharField(max_length=8)
# 定義默認(rèn)輸出格式
def __str__(self):
return "%d:%s:%d:%s:%s"%(self.id,self.name,self.age,self.sex,self.classid)
# 自定義對應(yīng)的表名,默認(rèn)表名:myapp_stu
class Meta:
db_table="stu"
3.激活模型
要將該應(yīng)用程序包括在我們的項(xiàng)目中,我們需要在設(shè)置中(myweb中的settings.py文件)添加對其配置類的引用INSTALLED_APPS。
該 myappConfig班是在myapp/apps.py文件中,所以它的虛線路徑'myapp.apps.myappConfig'。
編輯myweb/settings.py文件,并將該虛線路徑添加到該INSTALLED_APPS設(shè)置。
INSTALLED_APPS = [
'django.contrib.admin' ,
'django.contrib.auth' ,
'django.contrib.contenttypes' ,
'django.contrib.sessions' ,
'django.contrib.messages' ,
'django.contrib.staticfiles' ,
'myapp.apps.MyappConfig', #或者直接寫 myapp
]
?4.使用(兩種)
(1)現(xiàn)在進(jìn)入交互式的Python shell,并使用Django提供的免費(fèi)API
在命令提示符中以管理員身份運(yùn)行,進(jìn)入myweb文件,然后執(zhí)行命令:
python manage.py shell
再執(zhí)行命令:
from myapp.models import Stu
再執(zhí)行命令:
mod = Stu.objects
然后就可以獲取數(shù)據(jù)了,比如我這里獲取的是id=6的數(shù)據(jù)。
獲取所有人的數(shù)據(jù):
?
?這個就是對應(yīng)了第二步里的創(chuàng)建模型。
(2)在myapp應(yīng)用的視圖中使用
# 文件:myapp/views.py 文件代碼
from django.shortcuts import render
from django.http import HttpResponse
from myapp.models import Stu
# Create your views here.
def index(request):
return HttpResponse("Hello Django!")
def stu(request):
#獲取所有stu表信息
lists = Stu.objects.all()
print(lists)
#獲取單條學(xué)生信息
print(Stu.objects.get(id=1))
return HttpResponse("ok")
- 配置stu函數(shù)的訪問路由
#在myapp/urls.py文件中配置
path('stu/', views.stu),
啟動服務(wù)后,在瀏覽器中訪問,在命令行終端中查看輸出效果:?http://localhost:8000/myapp/stu
四、啟用網(wǎng)站Admin管理
1.?數(shù)據(jù)遷移
Django框架中有一個非常強(qiáng)大的應(yīng)用功能--自動管理界面,常被Web平臺管理者使用,去管理整個Web平臺。
默認(rèn)情況下,在settings.py配置文件中INSTALLED_APPS包含以下應(yīng)用程序,這些應(yīng)用程序都是由Django提供:
- django.contrib.admin - 管理網(wǎng)站。你會很快使用它。
- django.contrib.auth - 認(rèn)證系統(tǒng)。
- django.contrib.contenttypes - 內(nèi)容類型的框架。
- django.contrib.sessions - 會話框架
- django.contrib.messages - 消息框架。
- django.contrib.staticfiles - 管理靜態(tài)文件的框架。
為了后續(xù)的開發(fā),默認(rèn)這些應(yīng)用程序都是包含在里面的。
使用這些Django自帶的應(yīng)用程序,需要我們在數(shù)據(jù)庫中創(chuàng)建一些數(shù)據(jù)表對應(yīng),然后才能使用它們。為此,請運(yùn)行以下命令(數(shù)據(jù)結(jié)構(gòu)遷移):
$ python manage.py migrate
其中該migrate
命令查看該INSTALLED_APPS
設(shè)置,并根據(jù)myweb/settings.py
文件中的數(shù)據(jù)庫設(shè)置和應(yīng)用程序隨附的數(shù)據(jù)庫遷移創(chuàng)建任何必需的數(shù)據(jù)庫表
(稍后將介紹)。您會看到適用于每個遷移的消息。
?如果你的mysql版本是5.7以下的都不行,最好是5.8。
遷移完之后就會發(fā)現(xiàn)你的數(shù)據(jù)庫中多了十張表:
?
?2.創(chuàng)建管理員用戶
首先,我們需要創(chuàng)建一個可以登錄管理站點(diǎn)的用戶。運(yùn)行以下命令:
$ python manage.py createsuperuser
# 輸入您所需的用戶名,然后按Enter鍵。
Username: admin
# 然后將提示您輸入所需的電子郵件地址:
Email address: admin@example.com
# 最后一步是輸入你的密碼(>=8位)。您將被要求輸入密碼兩次,第二次作為第一次的確認(rèn)
Password: **********
Password (again): *********
Superuser created successfully.
3.啟動開發(fā)服務(wù)器
默認(rèn)情況下,Django管理員站點(diǎn)被激活。讓我們開始開發(fā)服務(wù)器并探索它。
啟動開發(fā)服務(wù)器命令如下:
$ python manage.py runserver
或
$ python manage.py runserver 0.0.0.0:8000
現(xiàn)在,打開一個Web瀏覽器,訪問地址:?http://127.0.0.1:8000/admin/
然后輸入你剛剛創(chuàng)建的用戶名和密碼就可以登陸進(jìn)去了。
?4.設(shè)置時區(qū)和語言:
編輯myweb/settings.py配置文件:
...
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
...
5.將我們自定義的應(yīng)用程序的加入到后臺管理
但我們的自定義應(yīng)用程序在哪里?并沒有顯示在后臺管理索引頁面上。
要做到這一點(diǎn),打開myapp/admin.py 文件,并編輯代碼如下:
from django.contrib import admin
from myapp.models import Stu
admin.site.register(Stu)
就會發(fā)現(xiàn)增加了:文章來源:http://www.zghlxwxcb.cn/news/detail-400341.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-400341.html
6.更深入設(shè)計(jì)后臺管理?
# 編輯myapp/models.py文件,在Stu類中添加如下信息,讓后臺管理顯示中文字段。
class Stu(models.Model):
'''自定義Stu表對應(yīng)的Model類'''
#定義屬性:默認(rèn)主鍵自增id字段可不寫
id = models.AutoField("學(xué)號",primary_key=True)
name = models.CharField("姓名",max_length=16)
age = models.SmallIntegerField("年齡")
sex = models.CharField("性別",max_length=1)
classid=models.CharField("班級",max_length=8)
# 定義默認(rèn)輸出格式
def __str__(self):
return "%d:%s:%d:%s:%s"%(self.id,self.name,self.age,self.sex,self.classid)
# 自定義對應(yīng)的表名,默認(rèn)表名:myapp_stu
class Meta:
db_table="stu"
verbose_name = '瀏覽學(xué)生信息'
verbose_name_plural = '學(xué)生信息管理'
# 編輯myapp/admin.py 文件,實(shí)現(xiàn)信息管理的個性化定制
from django.contrib import admin
# Register your models here.
from myapp.models import Stu
#Stu模型的管理器(裝飾器寫法)
@admin.register(Stu)
class StuAdmin(admin.ModelAdmin):
#listdisplay設(shè)置要顯示在列表中的字段(id字段是Django模型的默認(rèn)主鍵)
list_display = ('id','name','age','sex','classid')
#設(shè)置哪些字段可以點(diǎn)擊進(jìn)入編輯界面
list_display_links = ('id','name')
#list_per_page設(shè)置每頁顯示多少條記錄,默認(rèn)是100條
list_per_page = 10
#ordering設(shè)置默認(rèn)排序字段,負(fù)號表示降序排序
ordering = ('id',) #-id降序
#list_editable 設(shè)置默認(rèn)可編輯字段
#list_editable = ['age','sex','classid']
到了這里,關(guān)于使用Python進(jìn)行網(wǎng)站頁面開發(fā)——Django快速入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!