今天货抄,小叮當(dāng)來為大家繼續(xù)分享Django的干貨~
主要內(nèi)容有:項目的搭建復(fù)習(xí)和博客小案例
一饶火、項目的搭建復(fù)習(xí)
在xshell中進(jìn)入我們之前創(chuàng)建的虛擬環(huán)境
執(zhí)行workon
執(zhí)行workon djtest2.1?
djtest2.1為我們創(chuàng)建的虛擬環(huán)境,忘了的話可以回頭看下零基礎(chǔ)入手Django(一):基本介紹及環(huán)境搭建
執(zhí)行l(wèi)s? 執(zhí)行cd dj_project? ? ?dj_project為我們之前創(chuàng)建的用來存儲django項目的文件夾
執(zhí)行pip list?來檢查當(dāng)前環(huán)境是否可以進(jìn)行django項目創(chuàng)建
2.執(zhí)行命令“django -admin startproject 項目名” 來創(chuàng)建項目
我們以創(chuàng)建mysite項目為例
(1)執(zhí)行命令“django-admin startproject mysite”
執(zhí)行”ls"查看項目
(2)執(zhí)行cd mysite?進(jìn)入mysite文件夾?
?執(zhí)行ls查看文件
執(zhí)行tree命令查看文件結(jié)構(gòu)
(3)在pycharm中新建本地普通項目mysite用來進(jìn)行代碼同步
選擇在新窗口打開
點擊ok后啡彬,便可在新的pycharm窗口看到新建的項目
(4)進(jìn)行代碼同步
在Tools中找到“Deployment"找到Configuration
配置如下
點擊 Test SFTP connection進(jìn)行檢測
在mappings配置服務(wù)器中項目的路徑
值得注意的是戒良,同步時谋逻,我們一定要選擇項目的最外層目錄。
配置完成后點擊ok即可染苛。
在Tools中找到Deployment?在其中找到Download from ...?將服務(wù)器端的代碼下載到本地鹊漠。
可以看到點擊后,代碼便被飛快地同步到本地
(5)配置啟動django服務(wù)
點擊pycharm右上角的小三角
點擊后選擇編輯配置
在配置頁面選擇左上角的綠色小加號?選擇django server
配置django server?取名為mysite?配置host為0.0.0.0
配置環(huán)境變量
新建環(huán)境變量DJANGO_SETTINGS_MODULE?值為mysite.settings(項目名.settings)
選擇服務(wù)器端的解釋器
點擊fix
勾選Enable Django Support 并配置本地的mysite路徑和settings文件
配置本地mysite路徑
配置settings路徑
配置完成后點擊apply進(jìn)行應(yīng)用后,點擊ok
運行django server 之后若報如下錯誤
則從file處進(jìn)入settings配置python解釋器躯概,點擊其旁邊的修改按鈕為其配置ssh認(rèn)證信息即可登钥。
之后便可啟動mysite項目
(6)新建名為blog的app
打開Tools?選中Run manage.py Task...
執(zhí)行命令startapp blog
在項目目錄處右擊選擇 Deployment Download ....
下載完成后,便可看到新建的blog
(7)對項目進(jìn)行基本的配置
進(jìn)入mysite項目的settings.py進(jìn)行配置
①配置所有主機(jī)均可訪問
ALLOWED_HOSTS?=?['*']
注冊app
②在項目中新建templates目錄
在settings.py中配置對應(yīng)路徑
代碼如下
'DIRS':?[os.path.join(BASE_DIR,'templates')],
③新建static文件夾娶靡,并建立js牧牢、images、css子文件夾 用來存放靜態(tài)文件
在settings中配置相應(yīng)的路徑
代碼如下:
STATICFILES_DIRS?=?[
os.path.join(BASE_DIR,'static')
]
④配置數(shù)據(jù)庫
在xshell中進(jìn)入mysql 執(zhí)行?create database mysite;
在settings中進(jìn)行配置
代碼如下:
DATABASES?=?{
'default':?{
'ENGINE':?'django.db.backends.mysql',??#?數(shù)據(jù)庫引擎
'NAME':?'mysite',????????????????#數(shù)據(jù)庫名稱
'USER':?'xdd',???????????????#?鏈接數(shù)據(jù)庫的用戶名
'PASSWORD':?'xdd',??????#?鏈接數(shù)據(jù)庫的密碼
'HOST':?'192.168.255.130',???????????#?mysql服務(wù)器的域名和ip地址
'PORT':?'3306',????????????????#?mysql的一個端口號,默認(rèn)是3306
}
}
在主目錄下的_init_.py中通過pymysql將其使用
代碼如下:
import?pymysql
pymysql.install_as_MySQLdb()
(8)配置路由
①在blog文件夾下新建urls.py文件
②在主目錄下的urls.py中 import include 并分配路由
具體代碼如下:
from?django.contrib?import?admin
from?django.urls?import?path,include
urlpatterns?=?[
path('admin/',?admin.site.urls),
path('blog/',include('blog.urls')),
]
到此一個django項目的新建與基本配置就算復(fù)習(xí)完成了姿锭,你掌握了嗎塔鳍?
二、博客小案例
1.數(shù)據(jù)庫中的數(shù)據(jù)渲染進(jìn)模板
數(shù)據(jù)庫中的數(shù)據(jù)傳入模板示意圖如下
視圖函數(shù)可以查找數(shù)據(jù)庫中的數(shù)據(jù)艾凯,通過context傳給模版献幔。模版經(jīng)過render渲染即可展示在頁面上。
2.博客小案例主要功能
在本次博客小案例中趾诗,我們主要實現(xiàn)主頁蜡感、添加頁、列表頁恃泪、詳情頁這幾個功能郑兴。
我們在建好的mysite項目中,找到建好的templates目錄贝乎,在其下新建blog目錄情连,在其中新建
”demo_add.html"、“demo_base.html”览效、"demo_detail.html"
"demo_indesx.html"却舀、“demo_list.html”
(1)demo_add.html代碼如下:
{% extends 'blog/demo_base.html' %}
{% block title %}
添加博客{% endblock %}
{% block bodyblock %}
添加新文章
{% csrf_token %}
標(biāo)題
內(nèi)容
發(fā)布博客
{% endblock %}
(2)demo_base.html代碼如下:
{% block title %}
{% endblock %}
{% block bodyblock %}
{% endblock %}
(3)demo_detail.html代碼如下:
{% extends 'blog/demo_base.html' %}
{% block title %}
文章詳情{% endblock %}
{% block bodyblock %}
文章標(biāo)題
文章內(nèi)容{% endblock %}
(4)demo_index.html代碼如下:
{% extends 'blog/demo_base.html' %}
{% block title %}
首頁{% endblock %}
{% block bodyblock %}
{% endblock %}
(5)demo_list.html代碼如下:
{% extends 'blog/demo_base.html' %}
{% block title %}
文章列表{% endblock %}
{% block bodyblock %}
文章列表
標(biāo)題
操作
{% endblock %}
將代碼上傳到服務(wù)端
(6)配置blog下的views.py中配置視圖函數(shù)
from?django.shortcuts?import?render
#?Create?your?views?here.
def?blog_index(request):
return?render(request,'blog/demo_index.html')
def?blog_add(request):
return?render(request,'blog/demo_add.html')
def?blog_list(request):
return?render(request,'blog/demo_list.html')
def?blog_detail(request):
return?render(request,'blog/demo_detail.html')
(7)配置blog下的urls.py分配路由
from?django.urls?import?path,include
from?.?import?views
urlpatterns?=?[
path('index',views.blog_index,name='blog_index'),
path('add',?views.blog_add,?name='blog_add'),
path('list',?views.blog_list,?name='blog_list'),
path('detail',?views.blog_detail,?name='blog_index'),
]
(8)將配置好的代碼上傳到服務(wù)器后,在瀏覽器中查看
添加博客
主頁
列表
2.創(chuàng)建數(shù)據(jù)庫用來存儲博客
(1)在blog的models.py創(chuàng)建模型類
from?django.db?import?models
#?Create?your?models?here.
class?BlogModel(models.Model):
#創(chuàng)建title字段用來存儲博客標(biāo)題??blank表示允許title為空且與表單有關(guān)
title?=?models.CharField(max_length=100,blank=True)
#創(chuàng)建內(nèi)容字段
content?=?models.TextField()
(2)執(zhí)行makemigrations? 執(zhí)行migrate?映射到數(shù)據(jù)庫
(3)在xshell中進(jìn)入mysql進(jìn)行查看
執(zhí)行?use mysite;?執(zhí)行?show tables;
執(zhí)行desc blog_blogmodel;
3.實現(xiàn)各頁面的功能
(1)實現(xiàn)主頁
代碼如下
{% extends 'blog/demo_base.html' %}
{% block title %}
首頁{% endblock %}
{% block bodyblock %}
{% endblock %}
在瀏覽器中查看? ?點擊“添加文章”
點擊文章列表
(2)實現(xiàn)添加頁
在views.py中修改添加視圖函數(shù)
代碼如下
from?django.shortcuts?import?render
from?django.http??import?HttpResponse
#?Create?your?views?here.
#導(dǎo)入模型類
from?.models?import?BlogModel
def?blog_index(request):
return?render(request,'blog/demo_index.html')
def?blog_add(request):
if?request.method=='POST':
#從前端頁面中獲取數(shù)據(jù)
title?=?request.POST.get('title')
content?=?request.POST.get('content')
#存儲數(shù)據(jù)進(jìn)入數(shù)據(jù)庫
blog?=?BlogModel(title=title,content=content)
blog.save()
return?HttpResponse('博客發(fā)表成功锤灿!')
return?render(request,'blog/demo_add.html')
def?blog_list(request):
return?render(request,'blog/demo_list.html')
def?blog_detail(request):
return?render(request,'blog/demo_detail.html')
在瀏覽器中查看挽拔,并添加數(shù)據(jù),點擊“發(fā)布博客”
點擊“發(fā)布博客"后
通過xshell在數(shù)據(jù)庫中查看
執(zhí)行命令”select * from blog_blogmodel;“
(3)實現(xiàn)博客列表頁
重新定義views.py中的視圖函數(shù)
代碼如下
def?blog_list(request):
blogs?=?BlogModel.objects.all()
return?render(request,'blog/demo_list.html',context={'blog_list':blogs})
重新定義博客列表
html代碼如下
{% extends 'blog/demo_base.html' %}
{% block title %}
文章列表{% endblock %}
{% block bodyblock %}
文章列表
標(biāo)題
操作
{% for blog in blog_list %}
{% endfor %}
{% endblock %}
瀏覽器中查看
數(shù)據(jù)庫中查看
(4)實現(xiàn)博客詳情頁
重新定義views.py中的視圖函數(shù)
代碼如下
def?blog_detail(request,blog_id):
blogd?=BlogModel.objects.get(id=blog_id)
return?render(request,'blog/demo_detail.html',context={'blog':blogd})
在urls.py中重新進(jìn)行路由配置但校,為blog_id配置路由
代碼如下
path('detail/<blog_id>', views.blog_detail, name='blog_detail'),
重新定義html
{% extends 'blog/demo_base.html' %}
{% block title %}
文章詳情{% endblock %}
{% block bodyblock %}
{{ blog.title }}
{{ blog.content }}
{% endblock %}
在列表html中引用詳情頁的信息?實現(xiàn)點擊文章標(biāo)題查看文章詳情的功能
代碼如下
{% extends 'blog/demo_base.html' %}
{% block title %}
文章列表{% endblock %}
{% block bodyblock %}
文章列表
標(biāo)題
操作
{% for blog in blog_list %}
{% endfor %}
{% endblock %}
在瀏覽器中查看
點擊標(biāo)題后螃诅,便跳轉(zhuǎn)到了文章的詳情頁
(5)實現(xiàn)刪除功能
在views.py中定義視圖函數(shù)
代碼如下
from?django.shortcuts?import?render,redirect,reverse
def?blog_delete(request,blog_id):
del_blog?=?BlogModel.objects.filter(id?=?blog_id)
if?del_blog:
del_blog.delete()
return?redirect(reverse('blog_list'))
else:
return?HttpResponse('沒有這篇博客')
在urls.py中配置對應(yīng)的路由
path('delete/<blog_id>', views.blog_delete, name='blog_delete'),
在博客列表html中配置刪除時的頁面跳轉(zhuǎn)
代碼如下
{% extends 'blog/demo_base.html' %}
{% block title %}
文章列表{% endblock %}
{% block bodyblock %}
文章列表
標(biāo)題
操作
{% for blog in blog_list %}
{% endfor %}
{% endblock %}
在瀏覽器中查看?點擊刪除
刪除后
此時只有兩篇文章,測試刪除第3篇文章
輸入地址http://192.168.255.130:8000/blog/delete/3
(6)實現(xiàn)編輯功能
在templates下的blog文件夾下新建html命名為demo_edit.html
建立后
書寫代碼如下
{% extends 'blog/demo_base.html' %}
{% block title %}
添加博客{% endblock %}
{% block bodyblock %}
編輯文章
{% csrf_token %}
標(biāo)題
內(nèi)容
確認(rèn)編輯
{% endblock %}
在urls.py中配置路由
代碼如下
path('edit/<blog_id>', views.blog_edit, name='blog_edit'),
在views.py中書寫視圖函數(shù)
def?blog_edit(request,blog_id):
#當(dāng)使用filter獲取數(shù)據(jù)時為Querset對象
e_blog?=?BlogModel.objects.filter(id?=?blog_id)
if?request.method=='GET':
#?當(dāng)使用filter獲取數(shù)據(jù)時為Querset對象?需用first()取出數(shù)據(jù)
return?render(request,'blog/demo_edit.html',context={'e_blog':e_blog.first()})
elif?request.method=='POST':
if?e_blog:
title?=?request.POST.get('title')
content?=?request.POST.get('content')
e_blog.update(title=title,content=content)
return?HttpResponse("博客編輯成功")
else:
return?HttpResponse('沒有這篇博客状囱!')
else:
return?HttpResponse('不能處理的請求术裸!')
根據(jù)視圖函數(shù)修改demo_edit.html
代碼如下
{% extends 'blog/demo_base.html' %}
{% block title %}
添加博客{% endblock %}
{% block bodyblock %}
編輯文章
{% csrf_token %}
標(biāo)題
內(nèi)容 {{ e_blog.content }}
確認(rèn)編輯
{% endblock %}
在demo_list.html中為編輯添加url
代碼如下:
{% extends 'blog/demo_base.html' %}
{% block title %}
文章列表{% endblock %}
{% block bodyblock %}
文章列表
標(biāo)題
操作
{% for blog in blog_list %}
{% endfor %}
{% endblock %}
在瀏覽器中查看?
進(jìn)入列表頁面,點擊編輯
點擊后便可自動進(jìn)入編輯頁面
我們修改內(nèi)容后,點擊確認(rèn)編輯
之后出現(xiàn)相應(yīng)提示
返回列表,點擊博客標(biāo)題查看詳情
查看結(jié)果為
可見敛助,此時我們已經(jīng)成功完成博客的編輯功能。