天天看點

Python Django 學習日志(一)

前言

迷茫了一段時間,最近這段時間看了點Flutter,JavaScript,Html,幹什麼都提不起興趣,嗯~ o(* ̄▽ ̄*)o,我想可能是因為華為被老美封殺了影響心情,開個玩笑。呵呵呵,感覺自己Android開發到了一個瓶頸期(主要是基礎沒打牢,還太懶),一時半會突然提高也挺難的,就想着手學習其他相關知識,拓展下自己的視野和寬度,學習下後端開發,然後反哺移動端,最後再想突破,算是另類嘗試吧,反正多學一門語言不算壞事。。。。

本機環境:win10 python 3.7 django 2.2 

IDE環境:Pycharm 2019.1

一:認識

環境搞定後我們先建立一個Django項目,編譯完成後首先看下目前項目的架構,下圖為一個建立項目的完整架構,各個檔案的注釋可能不太準确,但是我們第一步先熟悉urls.py,setting.py,view.py,models.py這幾個檔案的用法,然後在慢慢體會其他檔案的用處

Python Django 學習日志(一)

二:殊途同歸——Hello World

不知道在什麼時候開始hello world成為了學習新語言的第一行代碼,我們當然也不例外,就從hello world開始,那就先寫個hello world吧,首先我們的在Pycharm底部這個位置打開PythonConsole這裡有配置好的python環境,可以直接開始輸入python文法(python是一種動态的互動性語言,寫下後回車則可以看到效果),首先寫下我們的第一行代碼,print("hello world"),這裡說明一下,我用的是3.0+的Python,如果是2.7(3.0以下)是會報錯的,2.0+是print "hello world"是沒有括号的

Python Django 學習日志(一)

python的hello world輸出了,django還會遠嗎?

下面我們看看在網頁上輸出一個hello world 怎麼操作,我們打開view.py檔案,可以看到這個檔案給我們引用了一個render檔案,但是我們現在用不到,我們要用用到的是HttpResponse,是以我們引用這個類,這個類在django.http下,仿照上面引用render的寫法,我們引用一下

view.py

from django.http import HttpResponse
           

然後我們寫個方法(函數)輸出hello world

def index(request):
    return HttpResponse("hello wold")
           

當然寫到這裡肯定是不完整的,因為還要配置路由,是以我們打開urls.py檔案配置一下路由,這裡預設使用的是path,我這裡加了一個url通路,效果是一樣的,預設支援正則比對,喜歡用正則的會非常容易上手

urls.py

from django.contrib import admin
from django.urls import path
from django.conf.urls import url


from demo import views
urlpatterns = [
    path('admin/', admin.site.urls),
    # path('index',views.index),#
    url(r'index',views.index)#和path路由效果是一樣的

]
           

然後我們啟動服務(python 内置了一個小型伺服器,不用在單獨裝其他的,直接點選啟動按鈕就可以了,當初就是因為PHP環境太難搞才舍棄,哼哼,PHP不是世界上最好的語言~!),如下圖,則環境正常,

Python Django 學習日志(一)

當然你點選http://127.0.0.1:8000/是打不開你想要的結果,後面還需要添加index,完整目錄如下: http://127.0.0.1:8000/index

Python Django 學習日志(一)

如果你感覺127.0.0.1太low你也可以換成你本地IP,點選Edit configurations...然後在配置裡修改,我本地ip為192.168.2.117,然後把端口修改為80端口

Python Django 學習日志(一)
Python Django 學習日志(一)

再次運作,則,然後在浏覽器中輸入新修改的IP

Python Django 學習日志(一)

運作結果

Python Django 學習日志(一)
Python Django 學習日志(一)

出現錯誤了,根據錯誤提示我們知道是我們更改IP後被限制通路了,是以我們需要更改配置檔案,

setting.py

ALLOWED_HOSTS = ['192.168.2.117']
           

然後再次通路,則正常了(如果感覺麻煩,則可以直接輸入'*',表示全部支援)

Python Django 學習日志(一)

如果你還覺得low那就更改下hosts檔案(windows 電腦一般在C:\Windows\System32\drivers\etc下),将IP位址修改為你想要的域名,嗯~ o(* ̄▽ ̄*)o,比方說victory.test,當然了你要是用taobao,blilibilili這種域名肯定不行,浏覽器會自動識别,暫時沒想到好方法

hosts

Python Django 學習日志(一)
Python Django 學習日志(一)

上面在view.py中提到render這個類我們并沒有用到,那它是怎麼用的呢,我們重新寫一個方法,用來展示render類的用法,重新聲明一個方法(函數),命名為index2,然後return render(),可以看到render有六個參數可以傳遞,但是可以隻傳兩個,第一個參數是必須的,就是方法的參數request,第二個參數是使用者通路的你指定檔案(常為html檔案),既然要指定html檔案,那麼我們就在templates檔案下建立一個Hmtl檔案,命名為index2,并增加<h1></h1>标簽,完整代碼如下

index2.html

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>hello world</h1>

</body>
</html>
           

然後有view檔案下的index2方法指定目前檔案,代碼如下

view.py

def index2(request):
    return  render(request,'index2.html')
           

設定路由如果你使用的是url而不是path則會出現通路的其實是index方法,而不是index2方法,這是因為url比對路徑是根據正則比對的,path是絕對定位的,是以如果使用url還要稍作修改,可以改為如下代碼,當然你要是方法名不一緻,然後通路路徑也有所差別是看不出來的,這裡僅做示例,随緣取名

urls.py

# path('index2',views.index2),#
    url(r'^index$',views.index),#和path路由效果是一樣的
    url(r'index2',views.index2),
           

效果如下

Python Django 學習日志(一)

到這裡了肯定有很多人問我怎麼讓我想要的東西給html呢,怎麼讓它根據我傳遞的内容顯示呢,其實這個也很簡單,這就要說到render的第三個參數了,第三個參數可以接收json數組和json對象,舉個例子吧,我們将代碼修改為這樣

view.py

def index2(request):
    data = {"data": "hello worldsss"}
    return render(request, 'index2.html', {"data": data})
           

然後修改

index2.html

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 id="helloworld"></h1>
<!--必須放在h1下面不然會報null,因為找不到id為helloworld的控件-->
<script type="text/javascript">
    var data={{ data|safe }}
    document.getElementById("helloworld").innerHTML=data.data
</script>

</body>
</html>
           

效果如圖

Python Django 學習日志(一)

如果是清單呢?該如何顯示,其實也很簡單,修改代碼

view.py

def index2(request):
    # data = {"data": "hello worldsss"}
    datalist=[]
    for i in range(0,20):
        test="我是第"+str(i)+"個資料"
        datalist.append(test)
    return render(request, 'index2.html', {"data": datalist})
           

index2.html

<script type="text/javascript">
    var data = {{ data|safe }}
        document.getElementById("helloworld").innerHTML = data[2]
</script>
           

展示效果

Python Django 學習日志(一)

你可能會說這隻展示了一條啊,要是都展示呢,也很簡單,你隻要循環輸出就可以了,可以去看看js的循環語句和html清單标簽,這裡要說的是django提供的一種方法,繼續修改代碼,展示效果

Python Django 學習日志(一)

index2.html

<!DOCTYPE html>
<html >
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 id="helloworld"></h1>
<!--必須放在h1下面不然會報null,因為找不到id為helloworld的控件-->
<script type="text/javascript">
    var data = {{ data|safe }}
        document.getElementById("helloworld").innerHTML = data[2]
</script>

<ul>
    {% for list in data %}
        <li>{{ list }}</li>
    {% endfor %}
</ul>
</body>
</html>
           

三:總結

Python和Django最基礎部分差不多就這些,一些Python的文法和html标簽和js的使用我都是一掠而過,如果有不明白的需要自己去查資料,我也是邊寫邊學,有很多都是知其然不知其是以然,平時多使用吧

與君共勉!

github下載下傳位址(送出記錄為目前文章案例)

簡書位址