1. 程式人生 > >Django小示例

Django小示例

cfi ons 部分 port lock lds gmail cal 數據模型

創建項目,在命令行中輸入:django-admin startproject mysite

則會創建一個名為mysite的項目。項目結構如下:

+mysite

|--+ugo

| |--+migrations

| |--__init__.py

| |--admin.py

| |--apps.py

| |--models.py

| |--tests.py

| |--views.py

|--+mysite

| |--+__pycache__

| |--__init__.py

| |--settings.py

| |--urls.py

| |wsgi.py

|--manage.py

|--db.sqlite3

|--+templates

|--+static

manage.py是主要的管理程序。

db.sqlite3是在執行完python manage.py migrate之後產生的,用於對應數據庫。

urls.py用於指明什麽樣的url對應哪一種方法的對應關系。

settings用於設置整個項目,例如加入什麽功能。

wsgi.py部署到主機上才會用到。

在mysite目錄下執行 python manage.py startapp ugo ,會在mysite下創建一個app。ugo文件夾中包含__init__.py文件,說明

它是作為一個可導入的包,所以需要導入ugo才能看到這個模塊中的內容。需要在settings中的變量INSTALLED_APPS中加

入ugo。

views.py用於編寫被調用函數的具體實現

如果有必要設置模板template文件,讓正確的模板在views.py中可調用,用於把函數執行完的結果轉移到對應的模板中。可自行在mysite下創建文件夾templates存放html文件。創建完後在settings.py中把TEMPLATES變量中的DIRS的設置為templates的具體位置,例‘DIRS‘: [os.path.join(BASE_DIR,‘templates‘).repalce(‘\\‘,‘/‘)],

如果有必要設置models.py,建立與數據庫的對應關系。

模板的使用

1.在setting.py中設置templates模板的目錄

2.在urls.py中設置網址與函數(index)的映射

3.創建在templates下創建編輯index.html文件

4.在views.py視圖中編輯index函數,函數返回的經過加工和傳參的Index.html文件以HttpResponse(html)的形式

5.在model.py中設置存儲數據的模板,用於和數據庫進行交互

設置urls.py的網址與函數的對應關系

ffrom django.conf.urls import url

from django.contrib import admin

from ugo.views import index

urlpatterns = [

url(r‘^admin/‘, admin.site.urls),

url(r‘^$‘,index)

]

url()的第一個參數是正則表達式。用於匹配網址域名後的內容,r‘^$‘表示域名後沒有任何內容,即http://localho

st:8000/這個網址,則會調用函數index.正則表達式中使用小括號括起來的部分會被當作參數,傳給後面的函數。

在templates目錄下創建index.html文件(使用{{now}}把變量now傳入)

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>

我的第一個Django網站

</title>

</head>

<body>

<h1>歡迎光臨</h1>

<h2>現在時刻: {{now}}</h2>

</body>

</html>

如果傳遞的變量是列表形式,在模板中可用for循環:

<h3>User lists</h3>

<ul>

{% for user in userlist %}

<li>{{user.name}}</li>

{% empty %}

<p>There is no user in the list</p>

{% endfor %}

</ul

{% for user in userlists %}和{% endfor %} 是一對。如果userlists是空列表就會顯示放在{% empty %}下的內容。

編輯views.py的index(request)函數

from django.http import HttpResponse

from django.template.loader import get_template

from datetime import datetime

def index(request):

template=get_template(‘index.html‘)

html=template.render({‘now‘:datetime.now})

return HttpResponse(html)

導入HttpResponse把輸出的內容轉換成HTTP的格式。

使用get_template()加載index.html文件,然後使用方法render()以字典形式傳入變量now.對與多個入參變量,可以

使用locals()方法,它的功能是以字典形式返回所有當前在內存中的局部變量。例

template=get_template(‘index.html‘)

now=datetime.now

userlists=list()

userlist.append({‘nane‘:‘Richard‘})

userlist.append({‘nane‘:‘John‘})

userlist.append({‘nane‘:‘Mary‘})

html=template.render(locals())

就可以把now,userlists這兩個變量一並傳遞到template.renders中

這時在mysite目錄下運行python manage.py runserver ,然後在瀏覽器中輸入http://localhost:8000就會看到

‘歡迎光臨!’這幾個字。

tempalte中的模板也可以設置一個基礎模板,然後在個性化的模板中繼承該模板

例,編寫基礎模板:

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>{%block title %}{% endblock %}</title>

<body>

<header>...</header>

<nav>...</nav>

{% block main %} {% endblock %}

<footer>...</footer>

</body>

</head>

</html>

保存為base.html,然後在子模板中使用 extends這個文件,,然後設置title和content就可以了

{% extends ‘base.html‘ %}

{% block title %} 歡迎光臨 {% endblock %}

{% block main % }

...這裏放所有想要呈現的index.html中的主要內容...

{% endblock %}

詳情可參考 https://docs.djangoproject.com/en/1.7/topics/templates/

關於靜態文件,不需要設置url與函數對應(通過函數來加工),直接顯示要獲取的文件,就是靜態文件。在settings.py中

設置靜態文件的根網址 STATIC_URL=‘/static/‘,

也就是網址前部分為http://localhost:8000/static時就會直接到靜態文件目錄讀取文件。

設置靜態文件的本地路徑 STATICFILES_DIRS=[os.path.join(BASE_DIR,‘static‘),],在項目路徑下創建文件夾static,在static裏可按文件類別分別創建文件夾js,css,images.

在templates模板文件中獲取靜態文件:

...省略...

{% load staticfiles %}

<img src="{% static ‘images/logo.png‘ %}" width=150/>

...省略...

5.models.py的基本格式如下:

class urllist(models.Model):

src_url=models.URLField()

short_url=models.CharField(max_length=20)

count=models.PositiveIntegerField()

def __unicode__(self):

return self.short_url

models中的數據類型及特性,具體可查看 https://docs.djangoproject.com/en/1.9/ref/models/fields/

在models中創建class,存盤後,可使用命令 python manage.py check 以確認所有設置的正確性。

python manage.py makemigrations ugo,最後的ugo表示我們創建的app ugo。

c:\pythonScripts\mysite>python manage.py check

System check identified no issues (0 silenced).

c:\pythonScripts\mysite>python manage.py makemigrations ugo

Migrations for ‘ugo‘:

ugo\migrations\0001_initial.py

- Create model urllist

c:\pythonScripts\mysite>python manage.py migrate

Operations to perform:

Apply all migrations: admin, auth, contenttypes, sessions, ugo

Running migrations:

Applying ugo.0001_initial... OK

以上三步都沒報錯,說明這個數據表已經被創建完成,可以拿來使用了。

可以啟用django預裝的admin功能操作DB.sqlite3數據庫。

在APP目錄(ugo)下找到admin.py,將我們的數據模型做好註冊即可:

from django.contrib import admin

# Register your models here.

from ugo.models import urllist

admin.site.register(urllist)

然後創建數據庫的管理員賬號

python manage.py createsuperuser

Username: admin

Email address: [email protected]

Password:

Password (again):

在啟動web服務器(python manage.py runserver)後,在瀏覽器中輸入:localhost:8000/admin就可看到數據庫

登陸界面,登陸後可看到admi主界面。

Django小示例