Django小示例
創建項目,在命令行中輸入: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小示例