本人搞iOS的,之前有需求所以学的Python,现在把笔记传上来。
这是我看django的官方入门教程写的笔记,懒得看英文的django0基础的喷油们可以看看。那么开始:
准备
- 安装python,或者看看其它博客,这个网上有好多。
- 选个编辑工具,之前用的PyCharm,感觉对于新手还挺友好的,去某宝买个码就OK了。现在学着用Atom,因为之前学RN的时候用的,所以也想试试看,atom中文社区里能找找推荐的插件。看自己爱好吧。
- 数据库。Python包含了一个SQLite数据库,我用的MySQL,单纯为了学习Django的话可以先跳过。官方特别提到的数据库是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
- 安装虚拟环境。虚拟环境就是建立的专属与项目的python环境,这样不会因为项目繁多导致环境里一堆安装包
进入虚拟环境后,终端会变成这样:(虚拟环境名) MacBook-Pro:目录 用户$$ sudo pip install virtualenv $ mkdir /srv/vpython $ cd /srv/vpython $ virtualenv --no-site-packages 虚拟环境名 进入虚拟环境:$ source /Users/admin/虚拟环境名/bin/activate 退出虚拟环境:$ deactivate
- 切换到虚拟环境后,安装Django:
正式开始pip install Django
part 1
- 在虚拟环境下,cd到需要的路径,创建一个名叫mysite的项目。运行:
用pycharm的话,新建django工程就可以。Django-admin startproject mysite
可以看到创建了这样的目录:
如果希望语言使用中文,mysite/ manage.py mysite/ __init__.py settings.py urls.py wsgi.py
settings.py
里的LANGUAGE_CODE
的值改成zh-hans
即可。
- 启动开发用的服务器,后面会另外部署,测试学习的话用这个就行,pycharm直接跑就好了:
python manage.py runserver
runserver
后面可以指定ip和端口,默认127.0.0.1:8000
。
此时会看到’You have unapplied migrations’的警告,先不管。
- 在mysite根目录(即与manage.py同级)下,创建名为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目录下,创建一个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()
函数用来添加其它的URLconf引用,并且没有$
符。
url()
函数有4个参数,2个必选参数,regex
,view
,2个可选参数:kwargs
和name
。
- 在mysite目录下运行
用浏览器打开http://127.0.0.1:8000/polls,没看到“ni hao shi jie”的页面算我输。python manage.py runserver
part 2
- 创建数据库。在
mysite/settings.py
文件里修改DATABASE
里的字段:
ENGIN
:根据自己的数据库选型,可以改成django.db.backends.sqlite3
、django.db.backends.postgresql
、django.db.backends.mysql
、django.db.backends.orcle
,其它的可以在这里找。
NAME
:数据库的name
USER
:数据库的user
PASSWORD
:对应user的密码
HOST
:本机的话就用‘127.0.0.1’
PORT
:端口
- 在INTALLED_APPS里定义了所有的django应用,要使用这些应用,要在数据库里建表:
python manage.py migrate
- 在polls应用里创建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有必选参数,CharField
需要指定max_length
。
Field的可以赋值可选参数,例如这里的votes
就指定了默认值0
。
有关联的话可以设置外键ForeignKey
。
- 启动模型。在
mysite/settings.py
的INSTALLED_APPS
添加:
这里的PollsConfig类是在INSTALLED_APPS = [ 'polls.apps.PollsConfig', ... ]
polls/apps.py
文件里的。
- 控制台运行:
成功的话可以看到这么输出:python manage.py makemigration polls
Migrations for 'polls': polls/migrations/001_initial_py: - Create model Choice - Create model Question - Add field question to choice
makemigration
是告诉django你在models上做了手脚,并且你希望保存这些变动。你可以在polls/migrations/001_initial.py
里看到你本次的变动。
可以使用python manage.py sqlmigrate polls 0001
来查看0001_initial.py
文件本次的sql语句,放心它只是让你看看而已,不会对数据库做这些sql操作。
- 真正对数据库操作:
所以综上所述,要对models做更改,需要以下3步:python manage.py migrate
1. 在models里修改model 2. python manage.py makemigrations来为那些更改做migrations 3. python manage.py migrate 让数据库应用这些更改
- 使用django提供的api做点事情
打开python的交互shell:
然后终端(我的是mac)会显示这些python manage.py shell
看看有多少问题:
创建一个question:# '>>>' 不是你敲出来的,是shell上本来就有的 >>> from polls.models import Question, Choice >>> Question.objects.all()
查看刚刚创建的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时,出现了>>> 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?>
查看刚刚我们创建的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
- 创建管理员用户
django默认有admin页面,可以对应用作管理。首先创建管理员账号:
按提示输入用户名,邮箱,密码和确认密码。密码不能太普通(password之流),不能是纯数字,不能跟邮箱类似。python manage.py createsuperuser
启动服务器(如果已经启动则不需要重新启动),登录地址:http://127.0.0.1:8000/admin/就能看到admin的登录页,登录登录进去是这样的:
-
注册polls应用。即在admin页面显示polls应用:
polls/admin.py from django.contrib import admin from .models import Question admin.site.register(Question)
刷新一下页面就可以看到这样:
tips:表单是根据Question自动生成的。不同的模型属性类型对应不同的html输入控件。对于DateTimeField类型,请确认settings里的TIME_ZONE设置。
戳这里查看下面的教程:Django入门-从0开始编写一个投票网站(二):part3-4。