Django是一个网站后端框架,使用起来确实方便,之前也看着别人的博客试着用过Flask,但还是觉得Django好,其中一点就是Django的Model都给你做好了,没有必要再去自己建Model,节省了数据库的构造时间,这里是Django官方文档,如果有小伙伴在看这篇笔记,那么需要忍受一下几点:
1)作者是初学者,所以有许多不全或者不正确的理解,也许之后会改正;
2)这篇笔记只是将我对工程结构的理解写了下了,所以有很多具体的函数使用等等都没有详细介绍,也许你会和我学习的时候一样,看的一头雾水,但是你所做的是只需要理解一些结构性的东西就好,而且我也希望可以在这方面帮助你;
============================================================================
注:本系列笔记基于Mac platform,工具为shell+vim,这份笔记基本是按照官方的tutorial整理的;
一、Django的主要工程架构
简而言之是MTV(Model,template,view)
二、创建工程
如果要新建一个Django工程,可以在终端输入:
django-admin startproject [projectname]
方括号里是你的工程名,建立好以后在当前目录下就可以看见自己的工程文件夹了。在这个里面最开始可以看见一个manage.py文件和一个与工程同名的文件夹,前者几乎和你之后的所有工程交互都有关,比如数据库构造、迁移、创建超级用户(管理员)等等;后者是一个真正包含你的工程的文件夹。其实还有一个sqlite数据库文件,是django工程默认使用的数据库,如果工程比较小的话,可以只用这个,其实为了方便,可以先使用这个数据库存储信息,等完工后,可以再迁移到其他数据库。要实现这个非常简单,之后的笔记会提到。文件结构是这样的:
三、创建Web-App
Django可以帮助你自动创建一个Web应用,只需要如下命令:
python manage.py startapp [appname]
说一下主要的文件:
1)views.py文件正如其名,可以在里面编写一些你想要在网页上体现的功能,用来响应网页请求的;
2)models.py文件则是用来存储数据库模板的;
3)test.py文件用来测试应用,之后可以在里面编写测试函数;
当views文件写好之后,还需要一些链接地址来对应它们,这时候可以在同目录下创建一个urls.py文件,内容可以是这样:
这还不够,因为这些链接只是存在于某个应用中的,如果要链接到当前工程,那么显然要想办法添加到工程的url里去,前面知道主工程下有个urls.py文件,修改如下:
上面的incude函数不是随便用的,只有在导入的是外部包时才会使用它。关于url函数,这里也给出一些说明:
"""函数包含4个参数,regex,view,kwargs,name,解释如下:
regex:一个给出的正则表达式;
view:一个给定的view函数,也就是之前Web应用文件夹里的views文件里的那些函数;
kwargs:链接前缀;
name:给当前链接命名,之后这个名称是属于全局的,但是实际工程中是有多个应用的,所以为了避免多义性,我们会在之前添加一个域的说明,app_name = 'polls',便可以避免多义性;"""
四、编写应用
1.设置数据库
数据库的配置在工程目录下的setting.py文件里,光改完这个还不够,如果是使用mysql的话,由于官方把原来python的数据库接口应用改名了,所以要在主工程的__init__.py文件里写点东西:(不过在这之前一定要记得安装python的mysql接口)
__init__.py文件要添加的信息
这些做完之后,可以用如下语句将原来数据库的信息迁移到新的数据库上面:
python manage.py migrate
模板的创建可以在models文件下编辑你想要的信息,实例如下:
其实相当于数据库建立的脚本,当你把想要的模板写好之后就可以使用如下指令,将你的脚本编译,之后在数据库建立对应的数据库,指令如下:
python manage.py makemigrations
3.装配Web应用到工程
就是将你创建的Web应用同步到工程,这里需要更改配置文件,比如如下实例:
以后每次你想要添加应用配置,都可以在这个list的第一条添加你的应用配置,配置格式是:[app_name].apps.['app_name'Config],至于为什么格式是这样,很简单,这个其实是一个路径,去对应的文件下看看就知道为什么了。
4.在Python交互环境下使用你创建的model
如果想要自动的使用结合了django的python交互环境,那么在终端启动python的时候需要在当前工程目录下启动,而且指令应当是:
python manage.py shell
>>>Question.objects.create(question_text='name', pub_time=timezone.now())
5.创建超级用户(管理员)
一句话的事情,直接贴代码:
python manage.py createsuperuser
让你的工程跑起来:
python manage.py runserver
python manage.py runserver:9000
这是注册模块的过程,之后就可以在后台管理界面看见Question的选项
五、创建模板
在某个应用文件夹下创建一个templates文件夹,之后再在templates下创建一个和应用同名的文件夹,这样做是因为Django会自己搜索匹配到自己找到的第一个templates,而这些templates的查找前提是在已经安装的应用里搜索的,那么如果没有一个用来区分的子文件夹,可能会出错。
文件夹创建完之后,在子文件夹里便可以编写自己需要的模板了,给出实例:
关于以上的语法规则可以参照官方文档
最后是一些小技巧:
1)不要使用一些“硬代码”,所谓“硬代码”,就是给定了一些参数,比如下面这样的情况:
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
<li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li>
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>