一、总述
Python的WEB框架主要分为以下:
流程
基本配置
路由系统
视图view
模板template
Model
中间件
Form
认证系统
CSRF
分页
Cookie
Seesion
缓存
序列化
信号
admin
二、Django的实现流程
#1 创建project
django-admin startproject mysite
—mysite
—settings.py
—url.py
—wsgi.py
— manage.py(启动文件)
#2 创建APP
python mannage.py startapp app01
#3 settings配置
TEMPLATES STATICFILES_DIRS=( os.path.join(BASE_DIR,"statics"), ) STATIC_URL = '/static/' 我们只能用 STATIC_URL,但STATIC_URL会按着你的STATICFILES_DIRS去找
#4 根据需求设计代码
url.py
view.py
#5 使用模版
render(req,“index.html”)
#6 启动项目
python manage.py runserver 127.0.0.1:8090
#7 连接数据库,操作数据
model.py
三、django的命令行
1、django-admin.py 是Django的一个用于管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每一个Django Project里都会有一个mannage.py
- manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等
- settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量
- urls.py ----- 负责把URL模式映射到应用程序
2、在命令行创建blog应用:python manage.py startapp blog
3、在命令行启动django项目:python manage.py runserver 8090
此处端口为8090
4、(1)生成同步数据库的脚本:python manage.py makemigrations
(2)同步数据库: python manage.py migrate
注意:在开发过程中,数据库同步误操作之后,难免会遇到后面不能同步成功的情况,解决这个问题的一个简单粗暴方法是把migrations目录下的脚本(除__init__.py之外)全部删掉,再把数据库删掉之后创建一个新的数据库,数据库同步操作再重新做一遍。
5、清空数据库:python manage.py flush
6、查询某个命令的详细信息: django-admin.py help startapp
admin 是Django 自带的一个后台数据库管理系统
7、启动交互界面 :python manage.py shell
8、查看详细列表(在忘记子名称的时候特别有用):python manage.py
9、创建超级管理员:python manage.py createsuperuser
10、显示并记录所有数据的改动:python manage.py makemigrations
四、配置文件(settings)
1、MEDIA_ROOT和MEDIA_URL
静态文件的处理又包括STATIC和MEDIA两类,这往往容易混淆,在Django里面是这样定义的:
- MEDIA:指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。如果你定义:
MEDIA_ROOT=c:\temp\media,那么File=models.FileField(upload_to=“abc/”)#,上传的文件就会被保存到c:\temp\media\abc - 例如:
class blog(models.Model):
Title=models.charField(max_length=64)
Photo=models.ImageField(upload_to="photo")
#这样上传的图片就上传到c:\temp\media\photo,而在模板中要显示该文件,则再这样写
在settings里面设置的MEDIA_ROOT必须是本地路径的绝对路径,一般是这样写:
BASE_DIR= os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT=os.path.join(BASE_DIR,'media/').replace('\\','/')
- MEDIA_URL是指从浏览器访问时的地址前缀:
MEDIA_ROOT=c:\temp\media\photo
MEDIA_URL="/data/"
- 在开发阶段,media的处理由django处理:
访问http://localhost/data/abc/a.png就是访问c:\temp\media\photo\abc\a.png
# 在模板里面这样写
<img src="{{MEDIA_URL}}abc/a.png">
在部署阶段最大的不同在于你必须让web服务器来处理media文件,因此你必须在web服务器中配置,以便能让web服务器能访问media文件
2、STATIC_ROOT和STATIC_URL
STATIC主要指的是如css,js,images这样文件,在settings里面可以配置STATIC_ROOT和STATIC_URL
配置方式与MEDIA_ROOT是一样的,但是要注意:
- STATIC_ROOT:在settings里面设置,一般用来放一些公共的js,css,images等
- app的static文件夹,在每个app所在文夹均可以建立一个static文件夹,然后当运行collectstatic时,Django会遍历INSTALL_APPS里面所有app的static文件夹,将里面所有的文件复制到STATIC_ROOT。
因此,如果你要建立可复用的app,那么你要将该app所需要的静态文件放在static文件夹中
也就是说一个项目引用了很多app,那么这个项目所需要的css,images等静态文件是分散在各个app的static文件的,当你要发布时,需要将这些分散的static文件收集到一个地方就是STATIC_ROOT
- STATIC文件还可以配置STATICFILES_DIRS,指定额外的静态文件存储位置(STATIC_URL的含义与MEDIA_URL类似)
STATIC_URL = '/static/' #别名
STATICFILES_DIRS = (
os.path.join(BASE_DIR,"statics") #实际名 ,即实际文件夹的名字
)
django对引用名和实际名进行映射,引用时,都是按别名来的,不会按实际名去找
- statics文件夹写在不同的app下,静态文件的调用:
STATIC_URL = '/static/'
STATICFILES_DIRS=(
('hello',os.path.join(BASE_DIR,"app01","statics")) ,
)
# 在html文件中:<script src="/static/hello/jquery-1.8.2.min.js"></script>
- 在网页中引用js文件
STATIC_URL = '/static/'
{% load staticfiles %}
# <script src={% static "jquery-1.8.2.min.js" %}></script>