1. 程式人生 > >Python的Web應用框架--Django

Python的Web應用框架--Django

logs cut oct oot 結構 安裝 轉換 itl license

一:簡介

python的web框架有很多,個人查了一下,有Django、Pylons、 Tornado、Bottle和Flask等,其中使用人數最多的是Django,而我學習Django也是因為openstack中使用的是django框架。

Django是一個開放源代碼的Web應用框架,由Python寫成,采用了MVC的軟件設計模式,即模型M,視圖V和控制器C。

二:安裝

由於Django2.0以後便不再支持python2.x,所以在安裝時一定要註意。

2.1.Python3.x+Django2.x

安裝python-setuptools

yum install python-setuptools

下載Django安裝包

easy_install django

2.2.Python2.x+Django1.x

安裝python-setuptools

yum install python-setuptools

下載Django安裝包

下載源碼包:https://www.djangoproject.com/download/

技術分享圖片

點擊歷史版本中的1.11版本下載。

輸入以下命令並安裝:

tar xzvf Django-X.Y.tar.gz    # 解壓下載包
cd Django-X.Y                 # 進入 Django 目錄
python setup.py install       # 執行安裝命令

2.3檢驗

[root@solar django]# python
Python 2.7.3 (default, May 15 2014, 14:49:08)
[GCC 4.8.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 6, 5, ‘final‘, 0)
>>>

三:創建第一個項目

3.1創建並瀏覽器展示

這裏要學會使用django-admin.py管理工具,來創建。

創建項目

django-admin.py  startproject  HelloWord

進入項目,查看目錄結構

[root@localhost ~]# cd HelloWorld/
[root@localhost HelloWorld]# tree
.
├── HelloWorld          --------項目的容器
│   ├── __init__.py     --------一個空文件,告訴 Python 該目錄是一個 Python 包
│   ├── settings.py     --------該djiango項目的設置、配置
│   ├── urls.py         --------該djiango項目的URL聲明,一份由djiango驅動的網站“目錄”
│   └── wsgi.py         --------一個 WSGI 兼容的 Web 服務器的入口,以便運行你的項目。
└── manage.py           --------一個非常實用的管理工具,可以實現與django的各種交互

1 directory, 5 files
[root@localhost HelloWorld]# 

啟動服務器

python manage.py runserver 0.0.0.0:8000

再在瀏覽器中輸入服務器IP:8000

此時要註意:

1:關閉防火墻,

2:如果出現“dango error:DisallowedHost: Invalid HTTP_HOST header: ‘‘. You may need to add u‘‘ to ALLOWED_HOST”錯誤,就修改settings.py文件中

ALLOWED_HOSTS = [‘*‘] #在這裏請求的host添加了*

技術分享圖片

3.2修改視圖內容

1.在HelloWorld/HelloWorld目錄中創建一個新文件 view.py 文件,並輸入代碼:

from django.http import HttpResponse
 
def hello(request):
    return HttpResponse("Hello world ! ")

2.在 urls.py 文件中註釋原來的代碼,添加如下代碼

from django.conf.urls import url

from . import view

urlpatterns = [
    url(r‘^$‘, view.hello),
]

然後啟動django,訪問瀏覽器出現如下內容

技術分享圖片

3.3修改URL

修改urls.py代碼,在其中添加如下紅色類似字符

from django.conf.urls import url

from . import view

urlpatterns = [
    url(r‘^yaohong$‘, view.hello),
]

然後啟動django服務

再輸入原來的服務器IP:8000會出現如下報錯

技術分享圖片

因為需要再在端口號後面加入剛剛添加的字符,如下圖所示

技術分享圖片

四:模板

4.1實現模板數據分離

1.創建模板文件

在HelloWorld下創建創建templates文件夾再在文件夾下創建hello.html,HelloWorld/templates/hello.html

[root@bogon HelloWorld]# tree
.
├── db.sqlite3
├── HelloWorld
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── view.py
│   ├── view.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── manage.py
└── templates
    └── hello.html

2 directories, 13 files

在hello.html中添加如下代碼

<h1>{{ hello }}</h1>

2.在settings.py中配置模板路徑

修改 TEMPLATES 中的 DIRS 為 [BASE_DIR+"/templates",]

TEMPLATES = [
    {
        ‘BACKEND‘: ‘django.template.backends.django.DjangoTemplates‘,
        ‘DIRS‘: [],
        ‘DIRS‘: [BASE_DIR+"/templates",],
        ‘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‘,
            ],
        },
    },
]

3.在 view.py中想模板提交數據

在view.py中加入如下代碼,其中“hello”為模板中的變量,“Hello Word! my name is yaohong”為提交的數據

from django.shortcuts import render

def hello(request):
    context          = {}
    context[‘hello‘] = ‘Hello World! my name is yaohong‘
    return render(request, ‘hello.html‘, context)

4.啟動服務器

python manage.py runserver 0.0.0.0:8000

在瀏覽器中輸入地址

技術分享圖片

4.2Django模板標簽

if/else 標簽

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

for 標簽

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

ifequal/ifnotequal 標簽

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

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

註釋標簽

{# 這是一個註釋 #}

過濾器

#{{ name }} 變量被過濾器 lower 處理後,文檔大寫轉換文本為小寫
{{ name|lower }}
#將第一個元素並將其轉化為大寫。
{{ my_list|first|upper }}

include 標簽

{% include "nav.html" %}

模板繼承

首先新建一個要被繼承的文件,這裏命名為base.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>繼承的學習</title>
</head>
<body>
    <h1>Hello World!</h1>
    <p>我是繼承過來的!!!</p>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
</body>
</html>

再在hello.html繼承base.html頁面

{% extends "base.html" %}
<h1>{{ hello }}</h1>

{% block mainbody %}<p>繼承了 base.html 文件</p>
{% endblock %}

技術分享圖片

五:模型

5.1安裝mysql

首先檢查系統是否自帶或者我們已經安裝mysql,

rpm -qa | grep mysql

安裝並啟動mysql:

#非centos7版本
yum install mysql
yum install mysql-server
yum install mysql-devel
service mysqld start

#centos7版本執行如下
yum install mariadb-server mariadb

systemctl start mariadb  #啟動MariaDB
systemctl enable mariadb  #設置開機啟動

驗證安裝

執行下面語句會看到版本信息,如果沒有任何輸出,表示mysql沒有安裝成功

mysqladmin --version

設置用戶

更改root密碼

mysqladmin -u root password "new_password";

設置test用戶密碼

 mysql -u root -p
>GRANT ALL PRIVILEGES ON test.* TO ‘test‘@‘localhost‘     IDENTIFIED BY ‘test123‘;
>GRANT ALL PRIVILEGES ON test.* TO ‘test‘@‘%‘     IDENTIFIED BY ‘test123‘;

5.2修改相應配置

1.數據庫配置

在HelloWorld/HelloWorld/settings.py下修改DATABASES{}如下:

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘, 
        ‘NAME‘: ‘test‘,
        ‘USER‘: ‘test‘,
        ‘PASSWORD‘: ‘test123‘,
        ‘HOST‘:‘localhost‘,
        ‘PORT‘:‘3306‘,
    }
}

2.定義模型

創建APP

進入HelloWorld文件夾

django-admin.py startapp TestModel

創建完成後目錄如下:

[root@localhost HelloWorld]# tree
.
├── db.sqlite3
├── HelloWorld
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── testdb.py
│   ├── testdb.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── view.py
│   ├── view.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── manage.py
├── templates
│   ├── base.html
│   └── hello.html
└── TestModel
    ├── admin.py
    ├── admin.pyc
    ├── apps.py
    ├── __init__.py
    ├── __init__.pyc
    ├── migrations
    │   ├── 0001_initial.py
    │   ├── 0001_initial.pyc
    │   ├── __init__.py
    │   └── __init__.pyc
    ├── models.py
    ├── models.pyc
    ├── tests.py
    └── views.py

4 directories, 29 files

修改HelloWorld/TestModel/models.py:

創建模型

# models.py
from django.db import models
 
class Test(models.Model):
    name = models.CharField(max_length=20)

修改settings.py

INSTALLED_APPS = (
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘TestModel‘,               # 添加此項
)

執行下列命令

$ python manage.py migrate   # 創建表結構

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

數據庫操作

修改HelloWorld/HelloWorld/urls.py

from django.conf.urls import *
from . import view,testdb
 
urlpatterns = [
    url(r‘^hello$‘, view.hello),
    url(r‘^testdb$‘, testdb.testdb),
]

創建HelloWorld/HelloWorld/testdb.py

# -*- coding: utf-8 -*-
 
from django.http import HttpResponse
 
from TestModel.models import Test
 
# 數據庫操作
def testdb(request):
    test1 = Test(name=‘runoob‘)
    test1.save()
    return HttpResponse("<p>數據添加成功!</p>")

然後在瀏覽器中輸入IP:8000/testdb

技術分享圖片

Python的Web應用框架--Django