1. 程式人生 > >django 第一天

django 第一天

django第一天

1.django簡介

在這裡插入圖片描述

​ Django釋出於2005年,是當前Python世界裡最負盛名且成熟的網路框架。最初用來製作線上新聞的Web站點。Django是一個用Python編寫的開放原始碼的Web應用框架(原始碼是開源的,遵守BSD版權)。採用了MVC的框架模式,也有很多人把它稱為MVT(MTV)模式。

v

django版本

jango版

django各個版本對python的要求:

Django version Python versions
1.11 2.7, 3.4, 3.5, 3.6
2.0 3.4, 3.5, 3.6, 3.7
2.1, 2.2 3.5, 3.6, 3.7

2.django的安裝

2.1.環境要求

​ 作業系統:ubuntu16.04

​ python版本:>=3.4

​ Django版本:1.11

2.2.安裝

首先使用pyenv建立一個虛擬開發環境,然後使用pip安裝

pyenv virtualenv 3.6.4  blogproject
pyenv activate blogproject
pip install django==1.11.16  #安裝指定版本的django

安裝完畢後,測試一下是否安裝成功

#在虛擬開發環境中
>>>python   #開啟python
>>>import django
>>>django.get_version()

3.第一個django專案

先切換到指定目錄,開啟虛擬環境,然後用以下指令建立一個專案

3.1 建立專案

cd project
pyenv acivate django
django-admin startproject hello

3.2 專案的目錄結構:

├── hello            #專案目錄
│   ├── __init__.py  #包標誌
│   ├── settings.py  #專案配置檔案
│   ├── urls.py      #路由對映表
│   └── wsgi.py      #wsgi介面
└── manage.py        #專案管理命令

manage.py:是Django用於管理本專案的命令列工具,之後進行站點執行,資料庫自動生成等都是通過本檔案完成。

專案配置檔案

# 專案根目錄 manage.py所在目錄
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 除錯模式
DEBUG = True

#允許訪問的主機
ALLOWED_HOSTS = ['*']


# 安裝的應用,自己定義應用也應該新增到這裡
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

#模板配置
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],   #模板路徑
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 資料庫配置
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 國際化
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'zh-hans'   #語言編碼
TIME_ZONE = 'Asia/Shanghai' #時區

3.3 測試伺服器啟動

在命令列下鍵入:

#命令:python manage.py runserver [ip:port]
python manage.py runserver
python manage.py runserver 0.0.0.0 9000

測試伺服器預設埠是8000,僅限於本地連線。開啟瀏覽器輸入:

http://localhost:8000 #或者
http://127.0.0.1:800

可以看到自己的網站。

ellworl

如果要讓遠端客戶端連線需要修改配置檔案,其中0.0.0.0:9000是可選的,0.0.0.0說明任何ip都可以訪問。

#修改setting.py中的這一行
ALLOWED_HOSTS = ['*']

3.4 建立應用

一個django專案中可以包含多個應用,可以使用以下命令建立應用:

#命令: python manager.py startapp  應用名稱
例項:  python manager.py startapp app

建立應用後,專案的結構如下:

├── App
│   ├── admin.py    站點管理
│   ├── apps.py          應用程式自身資訊
│   ├── __init__.py
│   ├── migrations    資料遷移
│   │   └── __init__.py
│   ├── models.py    模型
│   ├── tests.py
│   └── views.py     檢視響應函式
├── db.sqlite3      sqlite資料庫
├── hellodjango     專案
│   ├── doc.py
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-36.pyc
│   │   ├── settings.cpython-36.pyc
│   │   ├── urls.cpython-36.pyc
│   │   └── wsgi.cpython-36.pyc
│   ├── settings.py    系統配置
│   ├── urls.py         路由對映表
│   └── wsgi.py            wsgi協議
└── manage.py     專案管理命令

修改專案的配置檔案setting.py:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'App',     安裝自己的應用
]

到此為止,我們已經搭建好專案的基本框架,但專案還沒有實質性內容,下面將從檢視函式開始給專案新增功能。

4.簡單檢視函式

在django中view代表檢視函式,接收使用者的請求,進行處理然後返回html原始碼給客戶端。在框架中,我們可以在應用(app)的views.py中寫自己的檢視函式,進行相應的處理。

檢視函式只是一個普通的python函式,它的第一個引數必須是一個請求(request)物件,這是框架傳入的,我們可以通過請求物件獲取提交引數等內容。它的返回值必須是一個web響應,可以文字、html原始碼、重定向、404等內容。下面我們寫一個簡單檢視函式,返回“Hello Django"

from django.http import HttpResponse
def index(request):
	return HttpResponse("Hello Django")

其中HttpResponse函式需要引入模組django.http,我們可以直接寫HttpResponse,然後通過快捷鍵alt+enter,在下拉框中選擇要匯入的模組。

  • alt+enter 程式碼飄紅、飄黃、檢視定義、引入包都可以使用。

5.基本路由

新增完檢視函式後,還無法在瀏覽器中檢視,必須新增路由。所謂路由就是將使用者請求轉換為訪問對應的檢視函式。專案路由在hello下urls.py中

"""
from django.conf.urls import url
from django.contrib import admin
from App  import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.index)
]

路由由兩部分組成,第一部是一個正則表示式,匹配使用者的url,第二部分是檢視函式

 url(r'^$', views.index)
 r'^$' 正則規則匹配請求路徑(埠後到?前部分)
 views.index   檢視函式

正則表示式r’^$'匹配使用者在位址列中鍵入的url,當用戶在位址列中鍵入http://localhost:9000時會顯示Hello World.

6.簡單模板

在上面我們已經能夠展示簡單的web頁面,但要顯示一個html頁面,需要使用模板,在app下建立templates目錄,在templates目錄下建立一個index.html檔案

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>搜狐</title>
</head>
<body>
當你的才華還撐不起你的野心的時候,你就應該靜下心來學習;<br>
當你的能力還駕馭不了你的目標時,就應該沉下心來,歷練;
</body>
</html>

然後修改views中檢視函式index

from django.shortcuts import render
def index(request):
    return render(request,'index.html')

重新訪問網站。

也可以在html中使用變數和流程控制結構,生成複雜的html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <!--  模板中新增變數   -->
    <title>{{ title }}</title>
</head>
<body>
當你的才華還撐不起你的野心的時候,你就應該靜下心來學習;<br>
當你的能力還駕馭不了你的目標時,就應該沉下心來,歷練;
</body>
</html>

然後修改檢視函式:

from django.shortcuts import render
def index(request):
    return render(request,'index.html',content={'title':'草榴'})

重新訪問首頁

7.簡單模型

django自帶了一個sqlite資料庫,可以用於測試,生產環境一般不用。在配置檔案中已經設定好預設的sqlite資料庫。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',        #資料庫引擎
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),  #資料庫檔案路徑
    }
}

在pycharm左邊欄中選----database,然後點選"+",彈出sqlite的配置視窗

將File改為專案中sqlite檔案:db.sqlite3,然後點選測試,看看能否連線成功。第一次配置時,需要下載sqlite的驅動。完成後點選ok。

然後到app中models.py中建立一個User類:

class User(models.Model):
    uname = models.CharField(max_length=20)
    password = models.CharField(max_length=32)

到命令列下,輸入:

python manage.py makemigrations   #生成資料庫遷移檔案
python manage.py migrate      #生成資料庫表

然後到pycharm左邊欄database中檢視:

雙擊app_user新增資料:

到此為止,我們已經給app_user表添加了資料。然後給app新增一個模板:list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>使用者列表</title>
</head>
<body>
<table width="80%" align="center" border="1" cellspacing="0">
    <caption>使用者列表</caption>
    {% for user in users %}
        <tr>
            <td>{{ user.uname }}</td>
            <td>{{ user.password }}</td>
        </tr>
    {% endfor %}
</table>
</body>
</html>

繼續給app新增一個檢視操作函式:

from app.models import User
def userlist(req):
    #獲取app_user表中所有資料
    persons =  User.objects.all()
    return render(req,"list.html", context={'users':persons})

在專案的路由表中新增路由:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$',views.index),
    url(r'^list/$',views.userlist),
]

到瀏覽器中訪問:http://localhost:9000/list/