最近由于要作一个小型的网站,需求很简单有点像公司内部的管理网站,和室友一块儿倒腾,发现了一些坑。我本身以前没有接触过python 可是发现真的很是好上手。css
咱们没人会前端,因此最怕修改网页,一开始选择了Flask框架,我搞了半天遇到各类坑(还要修改css 麻烦),中间件也很差用,劝你们用django,资料多,很是好用。html
那么开始说重点,须要作的哪些东西。前端
http://python.usyiyi.cn/ 是主要的资料,里面是中文的资料建议一点点看下去。java
1-项目环境搭建。python
1.1第三方库准备mysql
开发环境是mac os 和ubantu 推荐你们下载一个第三方的软件叫 "Anaconda" ,安装很是简单,直接运行脚本就好。程序员
安装完了,能够到命令行运行 pip list。能够看到已经安装的python第三方库 。sql
此时咱们是没有django的库的。数据库
pip
install
Django
django
一句话安装完。怎么算成功呢?能够直接在写的python 里
import
django 没报错就成功,数据库咱们选择的是mysql,django 也须要安装算是中间件相似于java中的JDBC。
照样一句话
pip install MySQL
-
python
怎么成功?
就在 python 里import _mysql 没出错的话,恭喜你,要装的基本装完了。
1.2IDE的安装
IDE 使用eclipse,讲一个工具Pydev,安装自行百度,点点就行。
而后 到Eclipse了 New->Project->Pydev->Pydev Django Project,一路next 。发现eclipse 找不到Django 环境,回来点击 click here to configure an interpreter 而后把python interpreter 中的名为python的删掉,那是系统默认的,改为anaconda目录 下 bin/里面的python。默认是2.7.11吧。忘记安装目录?一个命令 sudo find / -name anacon* 搞定~。找到之后加进去,到了图一这一步就结束。
(图1)
2-数据库配置和使用
2.1数据库链接文件配置
我选了mysql,固然在这以前mysql的账号密码应该本身肯定了吧。mysql配置应该简单。可是若是要支持远程访问,好比你把数据库放到云上,别人机器上,毕竟开发不是一我的的事,我本身遇到的坑是"关于 mysql 配置文件中的 bind-address",自行百度,解决方案是删除就好。(推荐几个mysql 链接的桌面软件,用Navicat ,或者mysql workbench 都是不错的)。(后来发现这里输入密码和账号没什么用仍是要去修改在与项目同名的app里面的setting)。如今在mysql本身建立一个database 取名随便。我叫test,其余字段应该不用解释了如图2。
(图2)
2.2建立APP(模块)
而后咱们在工程里根目录右击->Django->Create App->输入名字就好。由于网页主要是MVC模式,创两个吧。一个叫db 专用于管理数据库(models 层) 第二个专用于后台逻辑。名字随便取由于可能要对应多个模块。django里面增长一个app 就须要在与项目同名的那个app的setting中Installed_app里面加入app名(如图4)。咱们加入之后目录结构(如图3.)
(图3)
(图4)
2.3用django模型层建表
数据库正式开发,数据库建立,在db的models.py中 对应数据库中每一个表写class,就是定义好字段,由于Django的目标是要程序员彻底脱离数据库的操做。那么咱们先不建表,cd 到你的工程目录去,用命令行 用打入 manage.py migrate 命令。效果如图5。
(图5)
若是你的配置是没错的,此时django 已经在你的数据库中建了不少表,都是django自带的,我也没有用起来,惟一用的是django自带的数据库管理界面,相似于Navicat,还支持搜索功能,本身去文档里 http://python.usyiyi.cn/django_182/intro/tutorial02.html 学吧。
而后在db的models里写一个表的代码。而后效果如图6 仍是用了Manage 脚本。
from __future__ import unicode_literals from django.db import models # Create your db here. class Message(models.Model): user_id = models.BigIntegerField(blank=True, null=True)
(图6)
到这里表都结束了,实际开发中,我数据库都是先建好的,那我所有都要写每一个类是否是很麻烦,有没有偷懒的办法呢?
答案是用./manage.py inspectdb
用了就知道,他会反向生成表的代码, 而后直接复制进models里面就行了。
3-url 解析
3.1url匹配处理函数
在Django中 通常url解析分为两层。
第一层负责解析APP的名,像我在test 里urls.py里写的(如图7)。第一个参数表示响应的url,第二个参数表示处理的模块。
(图7)
第二层是解析到具体的模块中的某个函数来响应对应的url。
好比在view app 中的urls.py(须要本身建立) 写的(图8)url(函数中第一个参数为匹配路径,后一个是对应函数名)里面的home对应view app中的views.py 里的函数home
(图9)
3.2静态网页配置
其实到这个时候已经能够实现响应了。(到这里还要解决一个问题 'Index/home.html')在哪里呢?咱们此时创一个文件夹叫templates html都应该放在这里,Index 是一个模块的名字。你能够在templates下面建不少个文件夹,对应不少的APP模块。(html就不属于本文范畴了)此时目录结构为
(图10)
搞定了后别忘记在test的setting 里加上一句代码
(图11)
"就是DIRS"里面.想一想也是,否则 Django怎么知道咱们的html放在这里呢。
4-逻辑层(也就是最后一步了,怎么样把数据库的东西查出来,放到html中。)
4.1数据库中的数据
往表里插两条数据
(图12)
4.2动态显示数据
看下代码:html部分
(图13)
里面的{%%}是django 自带标签的本身看文档学一下就会。
(图14)
里面的Message.objects.all() 表示从Message表中取出全部数据。还有什么复杂查询本身看文档,通常都是filter exclude,django 还支持sql语句直接写,函数名叫raw().
context就是返回给页面的一个对象里面放了不少值。在python里叫字典(dict)
4.3启动服务器
最后咱们用命令行来到咱们的目录,敲./manage.py runserver (要支持全部端口 和外网访问加0.0.0.0)。而后出现
(图15)
4.4查看网页
再到浏览器敲127.0.0.1:8000 django默认端口 (图16)
4.5实际开发中问题
结果出来了。遇到具体问题就是查一些文档和stackoverflow。发现一个时区问题,建议和我改为同样。把test里面setting中的时区部分改为这样。不然你会有八个小时的时差,
(图17)
。还有啥问题能够和我讨论的能够留言。小弟也是刚作完这个项目从零开始。码字不易~小问题就不在这里说了。