django的基本用法

来源:http://www.cnblogs.com/learn21cn/archive/2017/01/20/6321736.html
-Advertisement-
Play Games

1、項目創建 2、添加常用文件夾 一般名稱為static與templates,在新版本中需要手動添加,static用於靜態資源,templates用於存放模板文件。以下是創建好之後的目錄,註意在新建的項目testsite目錄(上面創建時使用的名稱)下麵,還會有一個testsite文件夾。 3、一個用 ...


1、項目創建

# 新建一個文件夾DjangoProjects
# 切換到需要的文件夾創建虛擬環境 C:\Projects\DjangoProjects
>python -m venv test_venv
# 激活虛擬環境 C:\Projects\DjangoProjects
>test_venv\Scripts\activate.bat
# 激活後會在前面添加虛擬環境作為首碼,如下所示
(test_venv) C:\Projects\DjangoProjects>

# 安裝django,會安裝到虛擬環境的site
-packages中 (test_venv) C:\Projects\DjangoProjects>pip3 install django # 新建項目 (test_venv) C:\Projects\DjangoProjects>django-admin.py startproject testsite # 這時就可以啟動開發伺服器了,註意先切換到項目文件夾 (test_venv) C:\Projects\DjangoProjects>cd testsite (test_venv) C:\Projects\DjangoProjects\testsite>python manage.py runserver # 創建應用 (test_venv) C:\Projects\DjangoProjects\testsite>python manage.py startapp testblog

2、添加常用文件夾

一般名稱為static與templates,在新版本中需要手動添加,static用於靜態資源,templates用於存放模板文件。以下是創建好之後的目錄,註意在新建的項目testsite目錄(上面創建時使用的名稱)下麵,還會有一個testsite文件夾。

3、一個用於說明如何使用django的例子

 結合上面創建的目錄和應用,這個例子會顯示如何從mongodb中提取數據,併在前端怎樣使用highcharts將數據呈現出來。

django的用法比較簡單,理解關鍵的文件是重點。

1> settings.py文件

顧名思義,這是django的設置文件對於這個例子來說,位於testsite目錄所包含的testsite文件夾中。

STATIC_URL = '/static/' # 說明使用static文件夾作為靜態資源的文件夾
STATICFILES_DIRS = (os.path.join(BASE_DIR, "static"),) # 如何找到static文件夾,這個必須有,要不然Django是找不到文件夾的位置的

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 添加,如何找到templates文件夾
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
         # 從略...
    },


from mongoengine import connect
# 第一個參數是資料庫
connect('test', host='192.168.1.108', port=27017)
# 如需驗證和指定主機名
# connect('blog', host='192.168.125.1', username='root', password='12345')

以上給出了部分代碼,註意上面藍色顯示的部分,一方面,表明瞭上面創建的static與templates文件夾是如何使用的,另一方面表明瞭連接mongodb的一種方式。
註意使用mongoengine需要先進行安裝: pip3 install mongoengine

2> urls.py

路由在這個文件中設置,文件位於testsite目錄所包含的testsite文件夾中。

from django.conf.urls import url
from django.contrib import admin
# 註意這兩種寫法
from testblog import views
from testblog.views import house, chart

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
    url(r'^house/', house),
    url(r'^chart/', chart),
]

在上面的url中,前面一個是正則表達式,後面一個是views.py(下麵介紹)中的函數。

例如,當我們訪問 127.0.0.1:8000/chart/ 這個頁面時,django會通過views.py中設置的自定義的chart函數來處理請求。

3> views.py

這個文件用來封裝處理請求的各種函數,本項目系統會自動創建在位於testblog文件目錄下麵,testblog是上面創建的應用名稱。

from django.shortcuts import render
from django.core.paginator import Paginator
from testblog.models import SalesInfo
# Create your views here.

# 地區銷售總額
# 因為要構建highcharts需要的數據,地區要有固定的順序,需要排序
# x軸:地區 
# y軸:銷售額 
def area_sales(cate):
    pipeline = [
    {'$match': {'$and': [{'category': {'$in':cate}}, {'province': {'$in': ['山東','浙江','江蘇','河北','遼寧']}}]}},
    {'$group': { '_id': '$province',  'sum_sales': {'$sum': {'$multiply': ['$price', '$quantity'] }}}},
    {'$sort': {'_id': 1}}
    ]
    # SalesInfo在models中設置
    for i in SalesInfo._get_collection().aggregate(pipeline):
        print(i)
        data = {
            'name': i['_id'],
            'y': i['sum_sales']
        }
        yield data
        
# 對於各地區的排序,與種類無關,此處傳了參數“糧食”,使用其他種類是一樣的        
c=[i['name'] for i in area_sales(['糧食'])]
# 也可以使用下麵的方式獲取排序
cate = ['山東','浙江','江蘇','河北','遼寧']
b = sorted(cate)

# 用於y軸的數據
sg_sales = [i for i in area_sales(['水果'])]
ls_sales = [i for i in area_sales(['糧食'])]
sc_sales = [i for i in area_sales(['蔬菜'])]


def chart(request):
    context = {        
        'sg_sales': sg_sales,
        'ls_sales': ls_sales,
        'sc_sales': sc_sales,
        'area': c
    }
    return render(request,'charts.html',context)

上面是關鍵部分的代碼,主要是chart函數,這個自定義的函數通過render函數將請求“request”,頁面(所謂的模板)“charts.html”,數據“context”連接起來。

毫無疑問,render函數是關鍵的一環(來源:from django.shortcuts import render

area_sales這個生成器函數用於產生y軸需要的數據,僅是為了說明如何構造highcharts圖表所需要的數據。裡面用到的SalesInfo是在models.py文件中設置的。

4> models.py

用於設置一些ORM對象模型,位於testblog文件目錄下麵

from django.db import models
from mongoengine import *

# Create your models here.
# 數據來源於mongodb,需要繼承自Document
class SalesInfo(Document):
    _id = StringField()
    name = StringField()
    category = StringField()
    province = StringField()
    description = StringField()
    price = FloatField()
    quantity = IntField()
    unit = StringField()
    saledate = StringField()
    # 對應資料庫中的數據表
    meta = {'collection':'salesnew'}

5> 模板

一系列的html頁面,統一放置在templates文件目錄下麵,頁面所需要的js、圖片、css樣式則存放到static文件夾下麵。可以將頁面中一些公用的元素拿出來作為主模板,方便重用。

A、主模板base.html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="{% static 'css/semantic.css' %} ">
    <script src="{% static 'js/jquery-3.1.1.js' %}"></script>
    <script src="{% static 'js/semantic.js' %}"></script>
    <!--<script src="{% static 'js/exporting.js' %}"></script>-->
    <script src="{% static 'js/highcharts.js' %}"></script>
    <script src="{% static 'js/highcharts-more.js' %}"></script>
</head>
<body>
<div class="ui thin visible left sidebar inverted vertical menu">
    <div class="header item">
        <img src="../static/themes/default/assets/images/logo2.png">
    </div>

    <div class="item">
        Documents
        <i class="browser icon"></i>
    </div>
    <div class="item">
        Charts
        <i class="bar chart icon"></i>
    </div>
    <div class="item">
        Others
        <i class="idea icon"></i>
    </div>
</div>
<div class="pusher">
    <div class="ui menu">
        <div class="header item" id="menu">
            Menu
            <i class="content icon"></i>
        </div>
        <div class="item">About us</div>
        <div class="item">Location</div>
        <div class="item">Others</div>
    </div>
    
    {% block area %}{% endblock %}
    
    </div>
</div>


<script>
    $('#menu').click(function(){
        $('.ui.sidebar').sidebar('toggle');
    })
</script>

{% block script %}{% endblock %}

</body>
</html>

如上,{% load static %} 用來標識會載入static文件目錄中的內容

<link rel="stylesheet" href="{% static 'css/semantic.css' %} ">、script src="{% static 'js/highcharts.js' %}"></script> 、<script src="{% static 'js/highcharts-more.js' %}"></script> 表明瞭django中載入資源的方式 highcharts.js與highcharts-more.js是使用hightcharts圖表所需要的,可以到hightcharts官網下載。

{% block area %}{% endblock %}來標識如何使用部件,可以看作是占位符。其中area是自定義的名稱。

B、頁面 charts.html

{% extends 'base.html' %}
{% block area %}
<div class="ui equal width grid" style="margin:5px 0 5px 0;width:70%">
   <div class="row">
      <div class="column">
        <div class="ui container segment">
          <div class="ui container" id="chart2"></div>
        </div>
      </div>
    </div>
</div>
{% endblock %}

{% block script %}
    <script>
        $(function () {
        // Create the chart
         $('#chart2').highcharts({
                chart: {
                    type: 'column'
                },
                title: {
                    text: '各地區銷售情況'
                },
                subtitle: {
                    text: 'Source: WorldSales'
                },
                xAxis: {
                    categories: {{area|safe}},
                    crosshair: true
                },
                yAxis: {
                    min: 0,
                    title: {
                        text: '金額 (元)'
                    }
                },
                tooltip: {
                    headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
                    pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                    '<td style="padding:0"><b>{point.y:.1f} 元</b></td></tr>',
                    footerFormat: '</table>',
                    shared: true,
                    useHTML: true
                },
                plotOptions: {
                    column: {
                        pointPadding: 0.2,
                        borderWidth: 0
                    }
                },
                series: [{
                    name: '水果',
                    data: {{ sg_sales|safe }}
                }, {
                    name: '糧食',
                    data: {{ ls_sales|safe }}
                }, {
                    name: '蔬菜',
                    data: {{ sc_sales|safe }}
                }]
            });
    });
    </script>
{% endblock %}

{% extends 'base.html' %}表明繼承自base.html

{% block area %}{% endblock %}包含了頁面的主要代碼

{% block script %}{% endblock %}包含了highcharts圖表用到的代碼,這個可以直接從highcharts官方網站複製。https://www.hcharts.cn/demo/highcharts

需要做的只是改變js中的數據源,主要的,如用於x軸的 categories: {{area|safe}},用於y軸的 data: {{ ls_sales|safe }},註意{{變數名}}是django在模板中載入變數的方式。當然,也可以換種方式,用js來填充數據,這個可以參考highcharts官網的文檔。

6> 結果

在控制臺中運行

(test_venv) C:\Projects\DjangoProjects\testsite>python manage.py runserver

會開啟開發伺服器,並得到一個網址127.0.0.1:8000訪問 127.0.0.1:8000/chart/ 會看到下麵的結果:

 

當然,數據的可視化也可使用百度的echarts。參見 http://echarts.baidu.com/

總結

以上簡要的介紹了django的使用方法,包括環境的搭建,以及一個具體的例子。  




您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • //在註冊時用戶名不能是純數字, 防止一個人的用戶名和另一個人的手機號相同public function Login(){ if (IS_AJAX) { $username = I('param.username'); //var_dump($username); $password = I('pa... ...
  • 我是一個C++初學者,控制台實現了一個俄羅斯方塊游戲。 代碼如下: C++ //"俄羅斯方塊"V1.0 //李國良於2017年1月20日編寫完成 include include include include include include using namespace std; int bloc ...
  • 實現一個簡單的地址薄,功能包括:地址的添加、瀏覽、編輯、查找、輸出文件等。 1 界面和元素 整個地址薄界面,可視為一個 AddressBook 類。而其中的 Name、Address 以及右側的兩個編輯欄,是包含在 AddressBook 中的元素,也即 “包含” 關係 (“has-a”)。因此,可 ...
  • 由於Self具有運行時動態特性,實現protocol必須禁止類的繼承,否則,由於類型確定導致編譯器不通過,具體詳見如下例子:````swiftprotocol AProtocol{ func createViewController() -> Self?}final class BClass:APr... ...
  • Python 函數 函數在Python中扮演著什麼樣的角色? 1.最大化的代碼重用和最小的代碼冗餘 2.流程的分解 首先讓我們編寫一個最簡單的函數'hello world!' 怎麼調用? ⤵️ 輸出什麼呢? 在此需要註意的是函數的調用要放在函數體的下麵,否則⤵️ 是的他會報錯,由此可以知道的是如果我 ...
  • 問題描述 小弱T在閑暇的時候會和室友打撲克,輸的人就要負責洗牌。雖然小弱T不怎麼會洗牌,但是他卻總是輸。 漸漸地小弱T發現了一個規律:只要自己洗牌,自己就一定會輸。所以小弱T認為自己洗牌不夠均勻,就獨創了一種小弱洗牌法。 小弱洗牌法是這樣做的:先用傳統洗牌法將52張撲克牌(1到K各四張,除去大小王) ...
  • jsp org.apache.jasper.servlet.JspServlet fork false xpoweredBy false ... ...
  • step1: 下載SSH連接到IP地址(阿裡雲上購買的) step2: 安裝下載phpstudywget -c http://lamp.phpstudy.net/phpstudy.bin chmod +x phpstudy.bin #許可權設置./phpstudy.bin #運行安裝 (註意,在./p ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...