简单前言一下毕设,计划是做创意设计和用户研究相关的内容,后续慢慢更出来整篇想法。为了足够酷炫,我打算做成一个绑了域名的webapp,若可能后续的测试也在上面进行。为了练手,我就从简单易学的webframework——django用起,并编写了它给出的范例程序。
工具
在进入Django官网前,我已经有了python2.7的安装以及eclipse+pydev的开发环境,前端工具有TextWrangler,但后来发现这些在Django强大的框架面前基本成为了Word一般的排版软件的作用——嗯就是用来管理和排版各自的代码,除此之外,另外需要用到的工具就是终端(Mac系统)。
安装
可以踩着Django官网的writing your first app教程来。
因为已经安装了python和pip,直接利用终端$pip install Django就行了。
然而我直接报了错:
查加猜觉得是访问某个文件夹的时候权限不够,命令前加上sudo,另外按照黄字提示先更新pip到9.0.1版本。
然后居然。。。已经安装了。检查一下版本没问题这步就ok了。
创建
发现不写东西短短一会我已经忘记怎么开始一个项目了。再去官网的教程查一下,是
1.进入终端,cd到想创建项目的目录
2.$django-admin startproject mysite
3.就在当前目录创建了一个名为mysite的文件夹
文件结构
引入数据库之后还会多一个db文件,当然我只用了默认的sqlite3。
manage.py这个文件非常有意思,似乎就好像控制台一样,访问他可以调用Django框架下项目的各种命令。
印象深刻的就是在mysite目录
$python manage.py runserver
再通过本地连接访问http://127.0.0.1:8000/,就能在网页中可视化编写的web项目。然后一手开着eclipse,一手开着textwrangler,范例程序的所有更改都能一步一步边改边看。这是因为Django表示他会自动重载页面,但是教程说明一些诸如添加文件的操作不自动触发重载,这样子我们可能需要重新加载一下这句代码。
项目中的app
app在项目中可能有多个,app也可以反复在多个项目中使用。
创建app,使用的是
$python manage.py startapp app名字
范例是一个投票程序polls。
app的文件结构
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
后来还会有templates和static,存放html和样式。
建立地址
通过编写mysite/urls.py建立项目页面的地址,polls/urls.py同理
可以看出,polls除了自己的index,还有detail,results以及vote三个子页面。
建立页面
编写polls/views.py。
如上是之前提到的index,detail和result三个页面的类,Choice和Question是从models文件夹传递过来的数据对象。可以看到除了其他对象,views还需要import相当多的其他需要的类。
建立数据模型
编写polls/models.py
Question有2个属性2个方法,Choice有3个属性1个方法。依赖于Django事先建立的models,对特定问题节省了很多的工作。
激活app
手动打开mysite/setting.py。
在installed_apps = [ ]列表中手动加入'polls.apps.PollsConfig', 然后在终端重运行migrate命令来引入数据库的相应更改。
$ python manage.py migrate
在这个过程中还涉及到其他一些函数
$ python manage.py makemigrations polls //告诉Django你对数据模型做了一些更改并希望存成migration。
$ python manage.py sqlmigrate polls 0001 //让Django推测需要的数据库模块。
初始化数据Question和Choice
这需要打开python的manage.py开发环境
$python manage.py shell
然后引入polls.app的类Choice和Question,来给他们建立一些对象。
由于这些类基于Django原来的数据模型,他本来就具有很多的方法,所以创建对象将会十分方便。
创建了对象,如果之前的几部分都编写的顺利,在本地运行的网页中会马上看到可交互的内容。
admin和tests
admin是Django用来给管理员操作的一个页面,也可以像views中的其他页面对象一样进行定制。
tests是python脚本,用来debug。范例中的都比较刻意。
最后还有templates用来存放html页面,static用来存放css样式来让Django自动搜索,值得注意的是目录要写到polls/style.css,因为和他的搜索方式有关。
--------------------------------------------->><<--------------------------------------------
第一个总结内容张的有点开,体验这么一个范例程序在劳逸结合状态差不多花了3天时间,后面还是加速为是。