本人搞iOS的,之前有需求所以學的Python,現(xiàn)在把筆記傳上來。
這是我看django的官方入門教程寫的筆記,懶得看英文的django0基礎的噴油們可以看看。那么開始:
準備
- 安裝python,或者看看其它博客,這個網(wǎng)上有好多。
- 選個編輯工具,之前用的PyCharm,感覺對于新手還挺友好的,去某寶買個碼就OK了?,F(xiàn)在學著用Atom,因為之前學RN的時候用的,所以也想試試看,atom中文社區(qū)里能找找推薦的插件。看自己愛好吧。
- 數(shù)據(jù)庫。Python包含了一個SQLite數(shù)據(jù)庫,我用的MySQL,單純?yōu)榱藢W習Django的話可以先跳過。官方特別提到的數(shù)據(jù)庫是PostgreSQL,MySQL,Oracle和SQLite。
- 安裝pip。這是python的包管理工具:
tip:如果有問題的話我也忘了怎么解決,因為這部分的筆記沒啦啦啦啦。curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python sudo easy_install pip pip install xxx - 安裝虛擬環(huán)境。虛擬環(huán)境就是建立的專屬與項目的python環(huán)境,這樣不會因為項目繁多導致環(huán)境里一堆安裝包
進入虛擬環(huán)境后,終端會變成這樣:(虛擬環(huán)境名) MacBook-Pro:目錄 用戶$$ sudo pip install virtualenv $ mkdir /srv/vpython $ cd /srv/vpython $ virtualenv --no-site-packages 虛擬環(huán)境名 進入虛擬環(huán)境:$ source /Users/admin/虛擬環(huán)境名/bin/activate 退出虛擬環(huán)境:$ deactivate - 切換到虛擬環(huán)境后,安裝Django:
正式開始pip install Django
part 1
- 在虛擬環(huán)境下,cd到需要的路徑,創(chuàng)建一個名叫mysite的項目。運行:
用pycharm的話,新建django工程就可以。Django-admin startproject mysite
可以看到創(chuàng)建了這樣的目錄:
如果希望語言使用中文,mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.pysettings.py里的LANGUAGE_CODE的值改成zh-hans即可。
- 啟動開發(fā)用的服務器,后面會另外部署,測試學習的話用這個就行,pycharm直接跑就好了:
python manage.py runserverrunserver后面可以指定ip和端口,默認127.0.0.1:8000。
此時會看到’You have unapplied migrations’的警告,先不管。
- 在mysite根目錄(即與manage.py同級)下,創(chuàng)建名為polls的應用:
python manage.py startapp polls
- 編寫第一個view,在
polls/views.py里:from django.http import HttpResponse def index(request): return HttpResponse("ni hao shi jie")
- 要展示這個view,要映射到url,所以需要一個URLconf(原文這么寫的,我也不知道啥意思)。
在polls目錄下,創(chuàng)建一個urls.py文件,在這個文件里:from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name="index"), ]
- 指定polls.urls模塊的根URLconf(我的理解是,這個根URLconf會解析路徑,然后找到
polls.urls,然后再由它找到對應的view),在mysite/urls.py里from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^polls/', include('polls.urls')), url(r'^admin/', admin.site.urls), ]include()函數(shù)用來添加其它的URLconf引用,并且沒有$符。
url()函數(shù)有4個參數(shù),2個必選參數(shù),regex,view,2個可選參數(shù):kwargs和name。
- 在mysite目錄下運行
用瀏覽器打開http://127.0.0.1:8000/polls,沒看到“ni hao shi jie”的頁面算我輸。python manage.py runserver
part 2
- 創(chuàng)建數(shù)據(jù)庫。在
mysite/settings.py文件里修改DATABASE里的字段:
ENGIN:根據(jù)自己的數(shù)據(jù)庫選型,可以改成django.db.backends.sqlite3、django.db.backends.postgresql、django.db.backends.mysql、django.db.backends.orcle,其它的可以在這里找。
NAME:數(shù)據(jù)庫的name
USER:數(shù)據(jù)庫的user
PASSWORD:對應user的密碼
HOST:本機的話就用‘127.0.0.1’
PORT:端口
- 在INTALLED_APPS里定義了所有的django應用,要使用這些應用,要在數(shù)據(jù)庫里建表:
python manage.py migrate
- 在polls應用里創(chuàng)建2個model,分別是
Question和Choice,以class的形式寫在polls/models.py里:
這些model的屬性就對應表里的column,值都是Field的子類。例如from django.db import models class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.CASCADE) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0)CharField,DateTimeField,表示值的類型。
所有的Filed類,都可以指定一個human-readable的name,這里pub_data指定了,其它的column的名字表意足夠清楚可以不用指定。
有一些Field有必選參數(shù),CharField需要指定max_length。
Field的可以賦值可選參數(shù),例如這里的votes就指定了默認值0。
有關聯(lián)的話可以設置外鍵ForeignKey。
- 啟動模型。在
mysite/settings.py的INSTALLED_APPS添加:
這里的PollsConfig類是在INSTALLED_APPS = [ 'polls.apps.PollsConfig', ... ]polls/apps.py文件里的。
- 控制臺運行:
成功的話可以看到這么輸出:python manage.py makemigration pollsMigrations for 'polls': polls/migrations/001_initial_py: - Create model Choice - Create model Question - Add field question to choicemakemigration是告訴django你在models上做了手腳,并且你希望保存這些變動。你可以在polls/migrations/001_initial.py里看到你本次的變動。
可以使用python manage.py sqlmigrate polls 0001來查看0001_initial.py文件本次的sql語句,放心它只是讓你看看而已,不會對數(shù)據(jù)庫做這些sql操作。
- 真正對數(shù)據(jù)庫操作:
所以綜上所述,要對models做更改,需要以下3步:python manage.py migrate1. 在models里修改model 2. python manage.py makemigrations來為那些更改做migrations 3. python manage.py migrate 讓數(shù)據(jù)庫應用這些更改
- 使用django提供的api做點事情
打開python的交互shell:
然后終端(我的是mac)會顯示這些python manage.py shellpy_shell.png看看有多少問題:
創(chuàng)建一個question:# '>>>' 不是你敲出來的,是shell上本來就有的 >>> from polls.models import Question, Choice >>> Question.objects.all()
查看剛剛創(chuàng)建的question的屬性:>>> from django.utils import timezone >>> q = Question(question_text="what's up?", pub_date=timezone.now()) >>> q.save()
查看所有的question:>>> q.id >>> q.question_text >> q.pub_date
可以看到打印所有的question時,出現(xiàn)了>>> Question.objects.all()<Question: Question object>這么個玩意兒,并沒有什么??用,所以我們可以編輯一下模型,增加__str__()(各自參考自己會的其它語言,像OC里就是重寫description方法):
增加class Question(models.Model): ... def __str__(self): return self.question_text class Choice(models.Model): ... def __str__(self): return self.choice_text__str__()還是有必要的,不僅方便自己調試,在admin頁面也有用喲。
再來增加一個自定義的方法:import datetime class Question(models.Model): ... def was_published_recently(self): return self.pub_date >= timezone.now() - datetime.timedelta(days=1)control+z(mac也是control不是cmd)退出shell,然后重新運行python manage.py shell
查看所有的question時可以看到輸出變成<Question: what's up?>
查看剛剛我們創(chuàng)建的question:
給這個question加上幾個選項:>>> from polls.models import Question, Choice >>> Question.objects.filter(id=1) >>> q = Question.objects.get(pk=1) >>> q.was_published_recently()>>> q.choice_set.create(choice_text="Not much", votes=0) >>> q.choice_set.create(choice_text="The Sky", votes=0) >>> c = q.choice_set.create(choice_text="Just hacking again", votes=0) >>> c.question # <Question: what's up?> >>> q.choice_set.all() >>> q.choice_set.count() # 3
- 創(chuàng)建管理員用戶
django默認有admin頁面,可以對應用作管理。首先創(chuàng)建管理員賬號:
按提示輸入用戶名,郵箱,密碼和確認密碼。密碼不能太普通(password之流),不能是純數(shù)字,不能跟郵箱類似。python manage.py createsuperuser
啟動服務器(如果已經(jīng)啟動則不需要重新啟動),登錄地址:http://127.0.0.1:8000/admin/就能看到admin的登錄頁,登錄登錄進去是這樣的:
默認admin.png
-
注冊polls應用。即在admin頁面顯示polls應用:
polls/admin.py from django.contrib import admin from .models import Question admin.site.register(Question)刷新一下頁面就可以看到這樣:
注冊polls的admin.pngtips:表單是根據(jù)Question自動生成的。不同的模型屬性類型對應不同的html輸入控件。對于DateTimeField類型,請確認settings里的TIME_ZONE設置。
戳這里查看下面的教程:Django入門-從0開始編寫一個投票網(wǎng)站(二):part3-4。


