1. 程式人生 > >Django入門 -- 框架操作基本流程

Django入門 -- 框架操作基本流程

入門 django

-- 入門

# Django開發流程:
# 1.創建虛擬環境;
# 2.安裝django;
# 3.創建項目;
# 4.創建應用;
# 5.在models.py中定義模型類,為視圖提供數據;
# 6.定義視圖,處理瀏覽器請求
# 7.配置URL
# 8.創建模板,呈現數據


-- 虛擬環境

# 針對python不同項目,而對應安裝的一堆包的集合;
-- ubuntu中安裝虛擬環境的命令(安裝兩個虛擬環境包,第二個是簡易化操作)
    sudo pip install virtualenv
sudo pip install virtualenvwrapper  
-- 創建虛擬環境
mkvirtualenv 環境名稱
mkvirtualenv py_django
-- 查看與使用虛擬環境
workon 兩次tab鍵
workon py_django
-- 刪除虛擬環境
rmvirtualenv 虛擬環境名稱
先退出:deactivate
再刪除:rmvirtualenv py_django
# 在創建虛擬環境過程中,在home目錄下的.virtualenvs文件下,
# 會生成剛創建的虛擬環境,而且過程中系統會默認生成多個包,
# 以及將usr/bin/文件下的python文件復制到這個虛擬環境包裏
# 的/bin文件下;
-- 查看當前所有的包
pip list 或者pip freeze
# 或者:~/.virtualenvs/py_django/lib/python2.7/site-packages下
# 查看所有的包
-- 虛擬環境下安裝包
pip install 包名稱
安裝django1.8.2的包
pip install django==1.8.2

-- 創建項目(圖書,英雄,一對多的關系)

# 在Desktop下創建,不會出現權限問題;
django-admin startproject 項目名稱
--tree
-- manage.py 是項目運行入口,指定配置文件路徑;
-- test1 包含項目的配置文件;
-- __init__表示這個目錄當作包使用;
-- settings.py 是整體配置文件;
-- urls.py 是URL配置文件;
-- wsgi.py 是與WSGI兼容的web服務器入口;

-- 創建應用

python manage.py startapp booktest(應用名稱)
-- booktest
-- admin.py
--__init__.py
-- migrations 
-- __init__.py
-- models.py  # 不許要手動到數據庫中操作,直接在這個文件匯總添加類;
-- tests.py

-- 添加/安裝應用

在test1/settings.py中INSTALLED_APPS下添加應用名稱就可以安裝;
‘bootest‘;
# 開啟服務器(同時生成一個sql數據庫)
# python manage.py runserver ip:端口
# 1.ip可以不寫;
# 2.默認端口為8000


-- 模型設計

-- 創建模型類

-- ORM框架 將python的對象轉換成數據庫中sql的操作;
# 通過自定義模型類和對象,完成對數據庫的操作
-- 在manage.py中設置環境變量,用settings控制管理整個項目;(默認已經設置)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test1.settings")
-- models.py
# 定義類時,需要繼承models.Model類;
# class BookInfo(models.Model):
btitle = models.CharField(max_length=20)  # 設置字符長度;
bpubdate = models.DateField()  # 設置日期格式;
# class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hcontent = models.CharField(max_length=100)
hgender = models.BooleanField(default=True)  # 設置布爾類型;
hbook = models.ForeignKey(BookInfo)  # 設置外鍵對象;
-- 查看遷移文件對應的sql語句
python manage.py sqlmigrate news 0001
-- 生成遷移文件(相當於生成sql語句,以及執行)
# 根據模型類與屬性,確定表結構,生成文件;
# 執行遷移;
生成:python manage.py makemigrations(執行sql語句)
# 會在migrations文件下,0001_initial.py的文件,__init__.py
# 裏面是類似於sql語句的代碼;
執行:python manage.py migrate(創建表結構)
# 生成__init__.pyc文件

-- 使用模型類

-- 進入項目的shell,進行簡單的API操作
python manage.py shell
# 在模塊中引入類對象,再進行操作;
from booktest.models import BookInfo
-- 在shell下對數據進行增刪改查(忽略)
BookInfo.objects.all()  # 查詢所有;
# 創建對象
b=BookInfo()
b.title=‘射雕英雄傳‘
from datetime import date
b.pub_date=date(2017,1,1)
b.save()  # 保存數據;
# 創建/獲取指定對象
b=BookInfo.objects.get(id=1)
b.title=‘神雕俠侶‘
b.save()
...

-- 後臺管理(CMS內容管理系統)

-- 創建管理員
-- 註冊用戶
python manage.py createsuperuser
# 用戶名默認:python;密碼:chuanzhi
-- 進入後臺管理頁面
# 修改界面語言(默認英文)
settings.py文件中修改成 LANGUAGE = ‘zh-Hans‘;TIME_ZONE = ‘Asia/Shanghai‘
# 在.virtualenvs/py_django/lib/python2.7/site-packages/django/contrib/admin/locale/文件下
-- 啟動服務器,瀏覽
python manage.py runserver
http://127.0.0.1:8000/admin
-- 註冊 admin.py(註冊模型類,將model.py創建的類引入後臺)
引入模型類
from models import *
admin.site.register(BookInfo)
admin.site.register(HeroInfo)
# str方法中,使用了中文,需要在models中str方法下的屬性encode("utf-8")
-- 支持自定義(在後臺顯示所有屬性,繼承admin.ModelAdmin類)
class BookInfoAdmin(admin.ModelAdmin):
list_display = [‘id‘, ‘title‘, ‘pub_date‘]
class HeroInfoAdmin(admin.ModelAdmin):
list_display = [‘id‘, ‘name‘, ‘content‘, ‘gender‘, ‘book‘]
# 將添加屬性的類添加到註冊中;
admin.site.register(BookInfo, BookInfoAdmin)

--視圖
-- 定義視圖函數(接受request,返回HttpResponse)
# view
# 本質就是一個函數;
# 封裝所有信息;
from django.http import HttpResponse
# 必須傳入HttpRquest對象的request,返回HttpResonse對象;
def index(request):
return HttpResponse(‘hello world‘)
-- 配置URLconf(找到對應視圖函數)
# 找到視圖的過程:
# 用戶在瀏覽器輸入url地址,請求訪問網站後,服務器後臺接受到信息,
# 然後與寫好的URLconf逐一匹配,如果匹配到就調用;沒有就返回404錯誤;
-- URLconf 編寫規則
1.使用正則表達式定義;
2.使用view.py中定義的視圖
-- URLconf 配置過程
1.在自己創建的應用(booktest)中創建urls.py文件,配置URLconf,定義;
from django.conf.urls import url
from . import views
urlpatterns = [url(r‘^$‘, view.index),] # view.index調用視圖模塊中定義的index函數;
2.在項目中的url.py,鏈接到應用的URLconf中;
url(r‘^‘, include(‘booktest.urls‘)),
# 其完整代碼
from django.conf.urls import include, url
from django.contreib import admin
urlpatterns = [
url(r‘^admin/‘, include(admin.site.urls))
url(r‘^‘, include(‘booktest.urls‘)),
]
# 請求訪問:127.0.0.1:8000

-- 模板

# 在Django中,將前端內容定義在模板中,再把模板交給視圖調用;
-- 創建模板
# 在項目目錄下創建模板文件夾templates,並在其中創建與應用
# 同名的文件存放模板文件;
-- 視圖中尋找模板
-- 在settings.py中做設置,為了找到templates模板文件位置
‘DIRS‘:[os.path.join(BASE_DIR, ‘templates‘)],  # 拼接templates文件夾所在位置;
-- 在views.py中加載渲染模板
def index(request):
cag = NewsCategory.objects.get(pk=1) # pk(primary key)相當於Id
data = {‘cag‘: cag.cag_name}
tpl = loader.get_template(‘index.html‘)
new_tpl = tpl.render(data)
return HttpResponse(new_tpl)
# 簡寫成一下操作: 
def index(request):
return render(request, ‘booktest/index.html‘)





Django入門 -- 框架操作基本流程