|
Django 是從真實(shí)世界的應(yīng)用中成長起來的,它是由 堪薩斯(Kansas)州 Lawrence 城中的一個(gè) 網(wǎng)絡(luò)開發(fā)小組編寫的。 它誕生于 2003 年秋天,那時(shí) Lawrence Journal-World 報(bào)紙的 程序員 Adrian Holovaty 和 Simon Willison 開始用 Python 來編寫程序。 當(dāng)時(shí)他們的 World Online 小組制作并維護(hù)當(dāng)?shù)氐膸讉€(gè)新聞?wù)军c(diǎn), 并在以新聞界特有的快節(jié)奏開發(fā)環(huán)境中逐漸發(fā)展。 這些站點(diǎn)包括有 LJWorld.com、Lawrence.com 和 KUsports.com, 記者(或管理層) 要求增加的特征或整個(gè)程序都能在計(jì)劃時(shí)間內(nèi)快速的被建立,這些時(shí)間通常只有幾天 或幾個(gè)小時(shí)。 因此,Adrian 和 Simon 開發(fā)了一種節(jié)省時(shí)間的網(wǎng)絡(luò)程序開發(fā)框架, 這是在截止時(shí)間前能完成程序的唯一途徑。 2005 年的夏天,當(dāng)這個(gè)框架開發(fā)完成時(shí),它已經(jīng)用來制作了很多個(gè) World Online 的站點(diǎn)。 當(dāng)時(shí) World Online 小組中的 Jacob Kaplan-Moss 決定把這個(gè)框架發(fā)布為一個(gè)開源軟件。 從今往后數(shù)年,Django是一個(gè)有著數(shù)以萬計(jì)的用戶和貢獻(xiàn)者,在世界廣泛傳播的完善開源項(xiàng)目。 原來的World Online的兩個(gè)開發(fā)者(Adrian and Jacob)仍然掌握著Django,但是其發(fā)展方向受社區(qū)團(tuán)隊(duì)的影響更大。 這些歷史都是相關(guān)聯(lián)的,因?yàn)樗齻儙椭忉屃撕苤匾膬牲c(diǎn)。 第一,Django最可愛的地方。Django?誕生于新聞網(wǎng)站的環(huán)境中,因此它提供很多了特性(如管理后臺),非常適合內(nèi)容類的網(wǎng)站,如Amazon.com, craigslist.org和washingtonpost.com,這些網(wǎng)站提供動(dòng)態(tài)的,數(shù)據(jù)庫驅(qū)動(dòng)的信息。 (不要看到這就感到沮喪,盡管Django擅長于動(dòng)態(tài)內(nèi)容管理系統(tǒng), 但并不表示Django主要的目的就是用來創(chuàng)建動(dòng)態(tài)內(nèi)容的網(wǎng)站。 某些方面特別高效與其他方面不高效是有區(qū)別的,Django在其他方面也同樣高效。) 第二,Django的起源造就了它的開源社區(qū)的文化。 因?yàn)镈jango來自于真實(shí)世界中的代碼,而不是 來自于一個(gè)科研項(xiàng)目或者商業(yè)產(chǎn)品,她主要集中力量來解決Web開發(fā)中遇到的問題,同樣 也是Django的開發(fā)者經(jīng)常遇到的問題。 這樣,Django每天在現(xiàn)有的基礎(chǔ)上進(jìn)步。 框架的開發(fā)者對于讓開發(fā)人員節(jié)省時(shí)間,編寫更加容易維護(hù)的程序,同時(shí)保證程序運(yùn)行的效率具有極大的興趣。 無他,開發(fā)者動(dòng)力來源于自己的目標(biāo):節(jié)省時(shí)間,快樂工作。 (坦率地講,他們使用了自己公司的產(chǎn)品。) ? ? 安裝: ? 自動(dòng)化安裝 #更新依賴庫 pip install --upgrade setuptools #安裝指定的版本 pip?install?Django==2.0.4 ? ? 文件式安裝 進(jìn)入到Django文件安裝目錄,輸入命令: python setup.py install ? ? 安裝后打印版本號 python -m django –version ? ? ? 生成Django項(xiàng)目 django-admin startproject mysite 注意:有的django-admin找不到問題,需要配置環(huán)境變量 ? ? 啟動(dòng)服務(wù) python manage.py runserver ? ? 本地化中間件 'django.mididdleware.locale.LocaleMiddleware', ? ? 路由包括 精準(zhǔn)路由和正則路由 #定義首頁 首頁留空 第二個(gè)參數(shù) 指定路由方法 ????path('',d1.index), ????#再定義一個(gè)路由 ????path('test',d1.test), ????#定義一個(gè)重定向頁面 ????path('123',d1.re_url), ????#使用多個(gè)網(wǎng)址來指向同一個(gè)路由方法 ????path('456',d1.re_url), ????#定義存儲cookie的路由 ????path('save_cookie',d1.save_cookie), ????#定義獲取cookie的路由 ????path('get_cookie',d1.get_cookie), ????#定義刪除cookie的路由 ????path('del_cookie',d1.del_cookie), ????#定義一個(gè)正則路由,可以使用\d數(shù)字 ????#常用元字符 .匹配所有 \d數(shù)字 \D非數(shù)字 \w 字母數(shù)字_ ????#如果在正則路由內(nèi),使用()分組,那么django會(huì)認(rèn)為進(jìn)行路由傳參 ????# re_path('^test-\d -.*$',d1.test_re) re_path('^test-(\d )-(.*)$',d1.test_re) ? ? ? Cookie 操作 #定義設(shè)置cookie(存儲) def save_cookie(request): ????#定義回應(yīng) ????response = HttpResponse("存儲cookie ok") ????#定義過期時(shí)間 ????expires = datetime(year=2019,month=11,day=20,hour=15,minute=5,second=0) ????#轉(zhuǎn)儲為django內(nèi)置時(shí)間 ????expires = make_aware(expires) ????#進(jìn)行存儲動(dòng)作 ????response.set_cookie("username","jack",expires=expires) ????#將回應(yīng)對象返回 ????return response ? #定義獲取cookie(?。?/p> def get_cookie(request): ????#定義變量獲取cookies屬性 ????cookies = request.COOKIES ????#從cookies通過key獲取value ????username = cookies.get("username","未拿到用戶名") ????#將用戶名返回 ????return HttpResponse(username) ? ? #定義刪除cookie方法 def del_cookie(request): ????#定義response對象 ????response = HttpResponse("刪除cookie成功") ????#調(diào)用delete_cookie()方法來刪除cookie ????response.delete_cookie("username") ????#返回response ????return response ? ? ? ? ? Django 模板 采用了 jinja2模板 但是與flask有一定的出入需要注意 ? #導(dǎo)入模板解析庫 from django.shortcuts import render ? #模板傳值 return render(request,'d2_index.html',{'test_str':test_str,'test_int':test_int,'test_list':test_list,'test_dict':test_dict,'content':content,'dt':dt}) ? {# 模板語法輸出 #} {{ test_str }} ???? {# 加法運(yùn)算 通過調(diào)用內(nèi)置過濾器來實(shí)現(xiàn)加法運(yùn)算 #} ? {{ test_int | add:-10 }} ? {# ?模板輸出list #} {{ test_list }} {{ test_list.2 }} ? {% for item in test_list %} ?{{ item }} ? {# 打印索引 counter 從1開始的計(jì)數(shù)器 #} ????????{{ forloop.counter }} ????????{# 打印數(shù)組索引 #} ????????{{ forloop.counter0 }} ????????{# ?倒序索引 #} ????????{{ forloop.revcounter }} ? ? ? ?? ????{% endfor %} ? ????{# 循環(huán)嵌套輸出 #} ????{% for item in test_dict %} ????????????{# 取首位和末尾 #} ????????????姓名:{{ item.name | first }} {{ item.name | last }} ? ?年齡:{{ item.age }} ????{% endfor %} ? ? ? ????{# 大小寫互轉(zhuǎn) #} ????{{ 'jack' | upper }} ????{{ 'ROSE' | lower }} ? ????{# 鏈?zhǔn)秸{(diào)用 #} ????{{ 'jack' | first | upper }} ? ????{# 返回長度 #} ????{{ '123456' | length }} ? ????{# 截?cái)嗖僮?#} ????截?cái)嘧址僮鱷{ content | truncatechars:20 }} ????截?cái)鄦卧~操作{{ content | truncatewords:3 }} ? ????{# 格式化日期 #} ? ? {{ dt | date:"Y-m-d H:i:s" }} ? ? ? ? ? ? Cookie簡易操作 #定義回應(yīng) ????response = HttpResponse("存儲成功") ????#第三個(gè)參數(shù)也可以傳max_age,單位是秒 ????response.set_cookie("email",p1,max_age=10) ????#返回回應(yīng) ????return response ? 來源:http://www./content-4-113651.html |
|
|