【第一天】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快速開發——環境部署、表單、數據庫操作、模板、文件學習