??Django是目前比較火爆的框架,之前有在知乎刷到,很多畢業(yè)生進入大廠實習后因為不會git和Django框架3天就被踢掉了,因為他們很難把自己的工作融入到整個組的工作中。因此,我嘗試自學Django并整理出如下筆記。
??在這部分,我將從Django的安裝講起,從創(chuàng)建項目到制作一個簡單的頁面(跑通流程),再到加入網(wǎng)頁,介紹Django的模板語法。最后利用所學完成一個小的網(wǎng)頁展示。
1. 安裝Django
??django跟flask不一樣,它pip install 之后除了會再Libs/site-package里面添加django包之外,還會在Scripts中間剪一個django-admin.exe文件,這個文件是個工具,能夠幫我們直接創(chuàng)建django項目。主要是因為django需要創(chuàng)建的文件文件夾比較,直接這個用這個比較方便,可以自動創(chuàng)建。
2. 創(chuàng)建項目(startproject)
2.1 創(chuàng)建項目
? 打開中斷并進入項目想創(chuàng)建的目錄。注意,第二條指令是需要保證python已經(jīng)加入到電腦的環(huán)境變量中之后的。
cd Django
django-admin startproject first_try
2.2 介紹項目文件
first_try
manage.py // 好東西,項目管理、啟動、創(chuàng)建app、數(shù)據(jù)管理都在這里,不要動它
first_try
__init__.py
settings.py // 項目的配置文件,很多操作也在這里(鏈接數(shù)據(jù)庫)
urls.py // url和python函數(shù)的對應關(guān)系都在這里,操作基本都在這里
asgi.py // 異步接受網(wǎng)絡請求的
wsgi.py // 同步接受網(wǎng)絡請求的
2.3 APP(startapp)
? app不是應用,是功能的劃分。
? 創(chuàng)建是靠manage.py創(chuàng)建的,終端輸入
python manage.py startapp application01
appliction01
__init__.py
admin.py // django默認的自帶后臺管理
apps.py // app啟動類
migrations // 數(shù)據(jù)庫變更記錄
__init__.py
models.py // 數(shù)據(jù)庫的操作在這里
test.py // 單元測試
views.py // first_try里面的url里的函數(shù)一般都要在這里找(常用)
3. 走通流程(urls, views, runserver)
3.1 第一個頁面
? 在first_try/settings.py中找到 INSTALLED_APPS,加入app的config。這里是加入配置文件。
? 寫一個index放到視圖中,相當與在這里寫了一個頁面。
? 修改Django自帶urlpatterns
,相當于在這里將頁面加入到網(wǎng)頁中。
? 在終端執(zhí)行啟動程序,我們看看結(jié)果。
python manage.py runserver 9211
3.2 多個頁面
? 在正常情況下,一個大的項目包含的頁面何止百個,這一個頁面當然不能滿足我們的需求。我們可以嘗試寫多個頁面。
? view.py
# *coding:utf-8*
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def index(request):
return HttpResponse(r"Hey man, U can do it!")
def Olsen(request):
return HttpResponse(r"I love Olsen!!!")
def user(request):
return HttpResponse(r"User")
? urls.py
from django.urls import path
from application01 import views
urlpatterns = [
path('index/', views.index),
path('index/Olsen', views.index),
path('user/', views.index)
]
? 查看效果,可以看到我們的三個網(wǎng)頁都在這里了。
4. 網(wǎng)頁
4.1 加入網(wǎng)頁(templates, render)
? 正常情況下我們訪問的網(wǎng)頁都是花里胡哨的,是由http文件展現(xiàn),完全不是現(xiàn)在這樣的簡單的幾行字,那應該怎么實現(xiàn)這個功能呢?
? 首先我們先要創(chuàng)建一個templates的文件,文件下面放入我們需要用到的html文件。注意,這里的文件名一定是templates,這個是django默認的。
? 然后把templates加入到路徑中,因為默認情況下會放到app下的templates里面,我們這個templates是再根目錄里面的:
? 我們隨便寫個html做實驗:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>I love Olsen!!!</div>
</body>
</html>
? 在views.py中加入這個網(wǎng)頁。在這里我們使用render
函數(shù),第一個參數(shù)為request
,第二個參數(shù)是文件名,第三個參數(shù)可以不要,是把文件中用{{}}
標起來的內(nèi)容替換的功能。
def Clarknb(request):
return render(request, "Clarknb.html")
? 再把這個添加到url.py里面:
urlpatterns = [
path('index/', views.index),
path('index/Olsen', views.index),
path('user/', views.index),
path('Clarknb/', views.Clarknb),
]
4.2加入圖片、css、js等靜態(tài)文件
- 圖片
? 先創(chuàng)建靜態(tài)目錄(static),再將目錄添加到路徑中。注意:一定要叫static
,配置里就是這么叫的。
? 效果如下:
- css、js、bootstrap等操作同上
? css文件操作同上。注意:可以用{% load static %}
加載static文件,然后再引用。這種方法需要在每個文件的頭部都手動load一次,比較麻煩,所以我們嘗試另一種辦法:在settings.py
中的TEMPLATES/OPTIONS
添加'builtins':['django.templatetags.static']
。這種寫法的好處是以后改代碼好改,因為這種讀法是在配置文件中找這個靜態(tài)的路徑,改的時候不需要像之前絕對路徑那樣一個一個改。
? 沒有報錯,證明引入成功了。
5. 模板語法
5.1 基礎語法與循環(huán)
? 為了方便平時的使用,Django是有自己的模板語言的,說實話有些地方跟vue挺像的。我們修改之前的例子嘗試一些Django的模板語法。這里用到了之前提到的render的第三個參數(shù)。
? 主要用到的知識點有:
- render第三個參數(shù)的使用
- 列表的使用
- 字典的使用
- 循環(huán)
? Clarknb.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="{% static 'js/jquery.js' %}" type="text/javascript"></script>
<script src="{% static 'plugins/bootstrap.min.js' %}" type="text/javascript"></script>
</head>
<body>
<div>I love Olsen!!!</div>
<div>test1:<br>{{n1}}</div>
<div>{{n2}}</div>
<!-- 調(diào)用列表-->
<div><br>test2:<br>{{n2.0}}</div>
<div>{{n2.2}}</div>
<!-- 調(diào)用字典-->
<div>
<br>test3:<br>
{{n3.hyq}}<br>
{{n3.zlp}}
</div>
<!-- 列表的循環(huán)-->
<div><br>test4:</div>
<div>
{% for item in n2 %}
<span>{{item}}<br></span>
{% endfor %}
</div>
<!-- 字典的循環(huán)-->
<div><br>test5:</div>
<div>
{% for k,v in n3.items %}
<li>{{k}}={{v}}</li>
{% endfor %}
</div>
<div><br>test6:</div>
{% for item in n4 %}
<!-- 兩種寫法都可以-->
<!-- 寫法1-->
{% for k,v in item.items %}
<li>{{k}}={{v}}</li>
{% endfor %}
<!-- 寫法2-->
<!-- <li>{{item.zlp}}=>{{item.hyq}}</li>-->
<!-- <br>-->
{% endfor %}
<img src="{% static 'img/Olsen01.jpg' %}" alt="" style="width:100%">
</body>
</html>
? views.py:
# *coding:utf-8*
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def Clarknb(request):
name1 = "Clark"
name2 = ["Olsen", "ClarkHu", "LLGreat"]
name3 = {"hyq": 1, "zlp": 2}
name4 = [{"hyq": 1, "zlp": 2},
{"hyq": 3, "zlp": 6},
{"hyq": 4, "zlp": 9}]
return render(request, "Clarknb.html", {"n1": name1, "n2": name2, "n3": name3, "n4": name4})
? 顯示結(jié)果如下:
5.2 判斷語句
? Django也提供了判斷語法:
- if
- elif
- else
? views.py不變
? Clarknb.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="{% static 'js/jquery.js' %}" type="text/javascript"></script>
<script src="{% static 'plugins/bootstrap.min.js' %}" type="text/javascript"></script>
</head>
<body>
<!-- 判斷-->
{% if n1 == "Clark" %}
<h1>ClarkHu NB!!</h1>
{% elif n1 == "Olsen" %}
<h1>I love Olsen</h1>
{% else %}
<h1>Brand new ending!!</h1>
{% endif %}
</body>
</html>
5.3注意點
6. 案例
? 根據(jù)所學,我們已經(jīng)可以做到從某個網(wǎng)頁爬取信息并將信息顯示到我們自己網(wǎng)頁上了。這里以聯(lián)通的新聞為例(中國聯(lián)通 (chinaunicom.com.cn))。實例中的新聞內(nèi)容被迫打碼,不然會被判定圖片違規(guī)……
? 我們首先獲取發(fā)出請求的URL:
? 返還的結(jié)果可以在response中查看:
? 接下來我們用爬蟲模擬這個步驟:
? views.py(記得改User-Agent
)
def getnews(request):
import requests
head = {
"User-Agent": bulabula
}
res = requests.get("http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2022/06/news", headers=head)
data_list = res.json()
return render(request, "news.html", {"n1": data_list})
? news.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>news</title>
</head>
<body>
<h1>
聯(lián)通新聞中心
</h1>
{% for item in n1 %}
<ul>
{% for k, v in item.items %}
<li>{{v}}</li>
{% endfor %}
</ul>
{% endfor %}
</body>
</html>
? urls.py
"""first_try URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path
from django.conf.urls import url
from django.contrib import admin
from django.urls import include
from application01 import views
from django.shortcuts import render
urlpatterns = [
path('index/', views.index),
path('index/Olsen', views.index),
path('user/', views.index),
path('Clarknb/', views.Clarknb),
path('news/', views.getnews),
]
? 結(jié)果很糙,但是跑通了,后續(xù)只要選取自己喜歡的信息展示就可以了。文章來源:http://www.zghlxwxcb.cn/news/detail-493880.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-493880.html
到了這里,關(guān)于從零開始的Django框架入門到實戰(zhàn)教程(內(nèi)含實戰(zhàn)實例) - 01 創(chuàng)建項目與app、加入靜態(tài)文件、模板語法介紹(學習筆記)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!