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)在实檀,大概的項目文件目錄如下圖所示:
八惶洲、如何返回動態(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ù)庫中拷呆。
【最后】:重啟Web服務(wù)后,刷新頁面疫粥,之后和用戶交互的數(shù)據(jù)都能保存到數(shù)據(jù)庫中茬斧,任何時候都可以 從數(shù)據(jù)庫中讀取數(shù)據(jù),展示到頁面上梗逮。
python manage.py runserver
【成果展示】
(留待更新...)