1. 程式人生 > >【第一天】django快速開發——環境部署、表單、數據庫操作、模板、文件學習

【第一天】django快速開發——環境部署、表單、數據庫操作、模板、文件學習

django 開發 自動化運維 系統技術 web開發

安裝django


1、安裝 setuptools

yum install python-setuptools

2、完成之後,就可以使用 easy_install 命令安裝 django

easy_install django


註意:django對於pip和setuptools的版本有嚴格要求,如果不想那麽麻煩建議直接裝個python3.6


django管理命令


django-admin.py

這是django的管理命令,無論在哪個目錄都可以用這個命令來對project或app做操作

最常用的命令總結如下:

1、創建一個項目

django-admin startproject [name]

2、創建一個app

django-admin startapp [name]

project和app的概念:

在django中一個project中涵蓋了很多個app,這些app用來實現一些可以復用的功能。這樣當我要使用實現一個曾經實現過的功能時候就可以調用這個app。

manage.py

這個命令用來啟動某個項目的uwsgi服務,命令如下:

python manage.py runserver 0.0.0.0:8000

什麽是uwsgi?

uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。WSGI是一種Web服務器網關接口。它是一個Web服務器(如nginx,uWSGI等服務器)與web應用(如用Flask框架寫的程序)通信的一種規範。


django文件介紹


技術分享圖片

關於urls.py文件

此文件使用來定義可顯示的視圖信息。相關代碼如下:

技術分享圖片技術分享圖片

以上信息我放了一些我自己的代碼上去

url()介紹

這個函數的作用是用來指向路由信息,url(a, b.c.[d])。其中該的a使用正則表達式表示的路由名字,比如上圖中的url(r'^search'.....表示訪問網址的時候可以通過127.0.0.0:8000/search來訪問。正則表達式中^表示以search為開頭的行,$表示以search為結尾的行。

其中的d,是一個可選項,表示name。簡單說,name 可以用於在 templates, models, views ……中得到對應的網址,相當於“給網址取了個名字”,只要這個名字不變,網址變了也能通過名字獲取到。

其中的b代表著你寫的python文件,c代表著你python文件中的函數。


註意

啟動django後,不能訪問,報400錯誤。

原因:沒有開啟允許訪問

處理:編輯HelloWorld目錄下setting.py ,把其中的

ALLOWED_HOSTS=[]改成ALLOWED_HOSTS=['*'] ##* 表示任意地址。


django模板


模板是django實現mvc思想中重要的一環

如何使用模板

技術分享圖片

1、在html前端文件中定義變量

技術分享圖片技術分享圖片

2、在settings.py中定義模板文件的路徑

修改HelloWorld/HelloWorld/settings.py

技術分享圖片技術分享圖片

3、修改view.py文件,添加一個新對象,用於向模板中提交數據

view.py是自己定義的,並非系統生成的

技術分享圖片技術分享圖片

關於render()方法

一旦你創建一個 Template 對象,你可以用 context 來傳遞數據給它。 一個context 是一系列變量和它們值的集合。hello.html表示傳值目標對象。request是一個固定參數,表示用request方式來傳輸。

4、context 字典中元素的鍵值 "hello" 對應了模板中的變量 "{{ hello }}"。再訪問訪問 http://127.0.0.1:8000/hello,可以看到頁面

技術分享圖片技術分享圖片


模板標簽


1、判斷

{% if %} 標簽接受 and , or 或者 not 關鍵字來對多個變量做判斷 ,或者對變量取反( not )

(1)

{% if condition %}
     ... display
{% endif %}

(2)

{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}


2、循環

例如,給定一個運動員列表 athlete_list 變量,我們可以使用下面的代碼來顯示這個列表

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

反向叠代

{% for athlete in athlete_list reversed %}
...
{% endfor %}

嵌套

{% for athlete in athlete_list %}
    <h1>{{ athlete.name }}</h1>
    <ul>
    {% for sport in athlete.sports_played %}
        <li>{{ sport }}</li>
    {% endfor %}
    </ul>
{% endfor %}


3、ifequal/ifnotequal 標簽

比較兩個值,當他們相等時,顯示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}


4、註釋

{# 這是一個註釋 #}


5、過濾器

模板過濾器可以在變量被顯示前修改它,過濾器使用管道字符

將my_list中的第一個元素轉化為大寫

{{ my_list|first|upper }}

只顯示bio參數的開始30個元素

{{ bio|truncatewords:"30" }}


6、include標簽

{% include %} 標簽允許在模板中包含其它的模板的內容。

{% include "nav.html" %}


模板繼承

1、創建一個模板文件html

技術分享圖片技術分享圖片

繼承使用的標簽是mainbody,繼承者們可以替換掉其中的部分。block標簽用來告訴模板引擎,紫陌版可以重載這些部分。

2、hello.html 中繼承 base.html,並替換特定 block。其中要指定extends標簽來指定父文件。

技術分享圖片技術分享圖片

操作數據庫


django對數據庫的操作方面我認為是最麻煩的,對此我還是青睞於flask中導入一個庫再通過sql查詢的方法。雖然很麻煩,但是它能夠支持很多個數據庫包括:PostgreSQL、MySQL、SQLite、Oracle,所以從這點上看還是可圈可點的。

環境準備

1、安裝驅動

首先需要安裝數據庫的驅動,mysql為例需要安裝mysqlclient

python3 -m pip install mysqlclient

2、配置settings.py文件

技術分享圖片技術分享圖片

3、創建APP

Django規定,如果要使用模型,必須要創建一個app。我們使用以下命令創建一個 TestModel 的 app

django-admin.py startapp TestModel(在項目的文件夾裏面)

之後就會出現一個TestModel的文件夾

HelloWorld
|-- TestModel
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- tests.py
|   `-- views.py

其中的models文件主要用來定義模本文件的信息。我們修改這個文件

技術分享圖片技術分享圖片

其中的Test代表數據庫的表名,name代表列名,charfield類似於varchar類型,max_length表示最大的長度為20個字節。

4、添加APP到settings.py

技術分享圖片技術分享圖片

5、應用模板的變更

之後輸入一下命令來應用app中定義的變更

$ python manage.py migrate   # 創建表結構
$ python manage.py makemigrations TestModel  # 讓 Django 知道我們在我們的模型有一些變更
$ python manage.py migrate TestModel   # 創建表結構

你的數據表就創建好了


插入數據

1、添加一個python工作文件如testdb.py

插入數據使用

test1 = Test(name='runoob')
test1.save()

技術分享圖片技術分享圖片

2、定義urls.py

技術分享圖片技術分享圖片

數據查詢

數據查詢方法總結

1、使用過濾器,相當於where

Test.objects.filter(id=1)

2、獲取單個對象,相當於where

Test.objects.get(id=1)

3、排序,相當於orderby

Test.objects.order_by("id")可以連鎖使用Test.objects.filter(name="runoob").order_by("id")

4、獲取所有數據,相當於select * from

list = Test.objects.all()

技術分享圖片技術分享圖片

更改數據

更改數據使用save(),或者update()

技術分享圖片技術分享圖片


刪除數據

調用delete()即可

技術分享圖片技術分享圖片



django處理表單


html表單是前後端交互的重要手法


GET方法

1、前端定義表單,采用get方法,以下是search_form.html

技術分享圖片技術分享圖片

2、穿件python工作文件search.py(名字無所有)

采用request.GET方法獲取前端傳遞的數據

技術分享圖片技術分享圖片

3、定義路由


POST方法

1、創建前端文件,註意post方法必須要使用csrf_token標簽。csrf 全稱是 Cross Site Request Forgery。這是Django提供的防止偽裝提交請求的功能。POST 方法提交的表格,必須有此標簽。

rlt標簽表示表格處理的處理結果預留位置

技術分享圖片技術分享圖片

2、創建一個python文件來處理表單請求

技術分享圖片技術分享圖片

註意


執行search請求 響應,出現錯誤 ,中文解析不了:

'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

解決辦法,添加如下代碼到 search.py

import sys  
reload(sys)
sys.setdefaultencoding('utf8')


【第一天】django快速開發——環境部署、表單、數據庫操作、模板、文件學習