Django入門 -- 框架操作基本流程
阿新 • • 發佈:2017-10-06
入門 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入門 -- 框架操作基本流程