Contents
overview
- First of all, do you know how to pronounce “Django”?
Django 的名字来源于一个吉普赛爵士吉他手的名字Django Reinhardt,至今为止,他被认为是世界上最棒的吉他手之一。
/ˈdʒæŋɡo/
django – “重量级”.
django用python 写成, MVC 模式(or MTV)
Django的理念是DRY(Don’t Repeat Yourself).
references
Django basic frame
- manage.pyy & django-admin.pyy
- 这两个文件代码和包含命令基本是一样的,只不过django-admin.py一般只用来创建项目,而manage.py用来管理创建好了的项目。
- 常见命令的使用,比如创建项目,创建应用,创建超级用户,数据表创建及更新,启动服务器等都包含在django-admin.py和manage.py里.
更详细
- urls.pyy
网址入口,关联到对应的views.py中的一个函数(或者generic类),访问网址就对应一个函数。 - views.pyy
处理用户发出的请求,从urls.py中对应过来, 通过渲染templates中的网页可以将显示内容. - models.pyy
models.pyy 决定了数据库长什么样. - forms.pyy
form.py是Django用来生成form表单代码和验证表单数据是否合法的一个文件, 可以在该文件中创建Form类, 实现自定义表单的功能
from django import forms
- templates directory
views.pyy 中的函数渲染templates中的Html模板,得到动态内容的网页. - settings.pyy
Django 的设置,配置文件,比如 DEBUG 的开关,静态文件的位置等。
- __file__ 这个变量可以获取到当前文件路径。os.path.dirname(file) 得到文件所在目录,再来一个os.path.dirname()就是目录的上一级,用一个变量保存这个路径,可移植性更好.
- DEBUG = True // 部署时就不要让用户瞅见bug
- ALLOWED_HOSTS 哪些域名可以访问,即使在 Apache 或 Nginx 等中绑定了,这里不允许的话,也是不能访问的。
当 DEBUG=False 时,这个为必填项,如果不想输入,可以用 ALLOW_HOSTS = [’*’] 来允许所有的。- 一般来说我们只要把静态文件放在 APP 中的 static 目录下,部署时用 python manage.pyy collectstatic 就可以把静态文件收集到(复制到) STATIC_ROOT 目录. 也可以用STATICFILES_DIRS =()来设置.
- admin.pyy
admin.pyy与后台相关,只需少许代码就可以实现强大的功能. - requirements.txt
运行pip install -r requirements.txt 就可以自动安装requirements.txt文件制定的所有包及版本. %这是一个很好的方式%
FBI Warning : 是在shell中哦~
基本命令
FBI Warning: 是在shell中, 不是python中.
- 新建项目 startproject
django-admin.pyy startproject project_name
特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-admin.pyy 试试
如果运行成功,会自动生成一些文件目录, e.g. manage.pyy, urls.pyy,settings.pyy.
- 新建app startapp
python manage.pyy startapp app_name
或 django-admin.pyy startapp app_name
- django-admin.pyy 是安装Django后多出的一个命令,并不是运行的当前目录下的django-admin.pyy(当前目录下也没有).
一般一个项目有多个app,一个应用也可以用在多个项目中.
如果运行成功,会在项目目录下生成一个app_name directory.
然后把新定义的app加到settings.py中的INSTALL_APPS中.- 新建的 app 如果不加到 INSTALL_APPS 中的话, django 就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件)
- 创建or更改数据库
python manage.pyy makemigrations // 创建更改的文件
python manage.pyy migrate // 将生成的py文件应用到数据库 - 使用开发服务器 runserver
开发服务器,即开发时使用,一般修改代码后会自动重启,方便调试和开发,但是由于性能问题,建议只用来测试,不要用在生产环境。
python manage.py runserver
# 当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001
# 监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip)
python manage.py runserver 0.0.0.0:8000
# 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
# 访问对应的 ip加端口,比如 http://172.16.20.2:8000
View
定义视图函数相关的URL(网址) i.e. 视图函数<–mapping–>URL.
urls.pyy is different in different Django versions .
扫描二维码关注公众号,回复: 4130353 查看本文章
template
%最简单的django.http.HttpResponse 来把内容显示到网页上%,但是要真的做个东西出来,当然得用模板渲染了.
默认配置下,Django 的模板系统会自动找到app下面的templates文件夹中的模板文件。
Django 模板查找机制
Django 查找模板的过程是在每个 app 的 templates 文件夹中找,各个 app 的 templates 形成一个文件夹列表,Django 遍历这个列表,一个个文件夹进行查找,当在某一个文件夹找到的时候就停止,所有的都遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于Python找包)。Hence , 一个app可以用另一个app的模板文件.
template 中循环/条件判断/标签/过滤器
- list 列表
mylist=["1","b"] // may be defined in views.pyy
{%for i in mylist%}
{{i}}
{% endfor %}
usage: {{var}} {%label%} (for --> endfor)
获取当前用户: {{ request.user }}
获取当前网址: {{ request.path }}
获取当前GET参数:{{ request.GET.urlencode }}
- dict 字典
{% for key, value in info_dict.items %} # in .html file
{{ key }}: {{ value }}
{% endfor %}
- ==, !=, >=, <=, >, < 这些比较都可以在模板中使用
and, or, not, in, not in 也可以在模板中使用
{% if num <= 100 and num >= 0 %}
num在0到100之间
{% else %}
数值不在范围之内!
{% endif %}
Model
Model is related to database ;
与数据库相关的代码一般写在 models.pyy 中,只需要在settings.py中配置即可,不用更改models.py中的代码,丰富的API极大的方便了使用。
修改数据表
Django 1.7.x 及以后的版本集成了 South 的功能,在修改models.py了后运行:
# makemigrations会在当前目录下生成一个migrations文件夹,该文件夹的内容就是数据库要执行的内容
python manage.py makemigrations
#migrate就是执行之前生成的migrations文件,这一步才是操作数据库的一步
python manage.py migrate
Django每次更新模型都需要执行以上两步,Django模型增加内容需要设定变量的初始值,否则会在第一步出现问题.
QuerySet API
从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet。
静态文件
静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中。
部署
- 收集静态文件
#把以前放在app下static中的静态文件全部拷贝到 settings.pyy 中设置的 STATIC_ROOT 文件夹中
python manage.pyy collectstatic
2 use nginx or apache2
nginx + uwsgi socket 的方式来部署 Django 更主流.
test
Django中有完善的单元测试,我们可以对开发的每一个功能进行单元测试,这样只要运行一个命令python manage.pyy test,就可以测试功能是否正常.