Python的Web應用程式框架--Django

來源:互聯網
上載者:User

標籤:setup   sqlite   first   type   gcc   原始碼   www.   net   condition   

一:簡介

     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檢驗
[[email protected] django]# pythonPython 2.7.3 (default, May 15 2014, 14:49:08)[GCC 4.8.0] on linux2Type "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

進入項目,查看目錄結構

[[email protected] ~]# cd HelloWorld/[[email protected] 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[[email protected] 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 urlfrom . import viewurlpatterns = [    url(r‘^$‘, view.hello),]

 

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

 

3.3修改URL

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

from django.conf.urls import urlfrom . import viewurlpatterns = [    url(r‘^yaohong$‘, view.hello),]

 

然後啟動django服務

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

因為需要再在連接埠號碼後面加入剛剛添加的字元,如所示

四:模板 4.1實現模板資料分離1.建立模板檔案

在HelloWorld下建立建立templates檔案夾再在檔案夾下建立hello.html,HelloWorld/templates/hello.html

[[email protected] 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.html2 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 renderdef 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 mysqlyum install mysql-serveryum install mysql-devel
service mysqld start

 

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

systemctl start mariadb  #啟動MariaDBsystemctl 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

 

建立完成後目錄如下:

[[email protected] 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.py4 directories, 29 files

 

修改HelloWorld/TestModel/models.py:

建立模型

# models.pyfrom 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.