1.创建项目:
? ? 在当前目录下创建项目:django-admin startproject my_site(项目名)
创建好的项目目录结构:
? ? ? ? my_site
|---manage.py #管理程序的文件,启动和结束等。
? ? ? ? ? ? |---my_site
|----__init__.py
|----settings.py? ? #程序的配置文件(数据库等配置)
|----urls.py? ? #程序的路由系统,即:url和处理其函数的对应关系
? ? ? ? ? ? ? ? |----wsgi.py? ? #指定框架的wsgi
网络结构参考:
? ? ? ? my_site/? ? ? #项目的容器
? ? ? ? ├── manage.py? #管理文件,可让你以各种方式与该 Django项目进行交互
? ? ? ? └── my_site? #项目目录
? ? ? ? ? ? ├── __init__.py? #一个空文件,告诉 Python该目录是一个 Python包
? ? ? ? ? ? ├── settings.py? #配置文件
? ? ? ? ? ? ├── asgi.py? # asgi服务器来处理websocket请求
? ? ? ? ? ? ├── urls.py? #路由系统 --> URL和函数的对应关系
? ? ? ? ? ? └── wsgi.py? # runserver命令就是用wsgiref??樽黾虻サ膚eb server
2.分析,创建app(在已有的项目父文件夹下与真正主项目软件包同级的目录下):
? ? django-admin startapp app01(app??槊?
一个项目中会包含一个或多个子项目,每个项目实现不同的功能和服务,如微信里包含基本通信功能,
? ? 还有支付、小程序等,每块业务都可以分为一个子项目。在 django中,我们管这个子项目叫app。
? ? 为了开发和维护方便,每个子项目(app)都会有一个独立文件夹来存放各自的业务代码。
? ? 一般程序简单情况下,只需要创建一个app即可。例如:
? ? 淘宝:? ? ? #项目,一个大的项目不可能将所有业务放在同一个项目内,需要向下划分为多个app???子项目)
WEB? ? #app
支付宝? #app
物流
商家管理
客服系统
后台管理
? ? 创建好的app目录结构:
? ? .
|----__init__.py? ? #包
? ? |----admin.py? #数据库后台
? ? |----apps.py? ? #django把项目和app关联起来的一个文件,一般不需修改
? ? |----migrations #数据库相关
? ? |? ? |----__init__.py
|----models.py? #数据库操作地方
? ? |----tests.py? #单元测试
? ? |----views.py? #业务逻辑代码
3.第一次django请求
基本流程:
? ? 1.匹配路由,路由分发器查找用户请求的url对应关系
? ? ? ? 1.找到业务函数,调用
? ? ? ? 2.找不到,报404
2.业务函数,执行业务逻辑
? ? 3.返回数据给浏览器
? ? django第一次请求的基本流程(类似):
? ? 浏览器--①匹配路由-->urls.py(路由匹配程序)--②调用业务函数-->views.py(业务逻辑程序)--③执行业务逻辑,返回数据-->浏览器
由此可以归纳出基本过程:
? ? 1.在urls.py内编写路由规则
? ? 2.在views.py编写对应的业务函数
? ? ? ? 2.1编写业务函数代码
? ? ? ? 2.2通过HttpResponse方法返回数据给前端
? ? 3.进行单元测试检查业务实现效果:python manage.py runserver 0.0.0.0:8000
4.单元逻辑测试(利用django自带的web测试服务器):
在项目最外层目录下执行命令:
? ? python manage.py runserver 0.0.0.0:8000(测试自定义的ip:port)
开始一直说找不到django或是未激活虚拟环境,查资料无果,配虚拟环境无果,配环境变量无果,最后终于发现了些许蛛丝马迹,
? ? 可能是python版本冲突
? ? 将C:\Users\admin\AppData\Local\Programs\Python目录下之前不小心安装的python310版本文件夹全部删除,问题解决
? ? 服务开启后,浏览器访问http://127.0.0.1:8000即可测试项目
另外,服务开启后如果不关闭,每次修改代码并保存后,服务会自动重启
5.返回html页面数据:
? ? 实际不可能把一个复杂的html直接当做字符串内嵌到views内,因此需要在项目总目录下建立一个目录(例如html)专门存放html页面文件
? ? 而这些自定义的文件夹需要在settings.py中的TEMPLATES列表中进行配置,需要在其中的字典中'DIRS'键对应的列表内自定义,要用到
? ? 绝对路径,可以借助settings.py中已有的变量BASE_DIR(项目根目录的绝对路径)和os.path.join(BASE_DIR, "html")方法进行拼接:
? ? 1.配置settings.py
TEMPLATES = [? #模板,处理html文件
? ? ? ? {
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "html"), ],? #告诉django html等文件夹的位置
? ? ? ? ? ? 'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
2.views.py调用render方法
? ? 返回指定html页面文件可以使用这种方式:
? ? ? ? return render(request, 'form.html') #其中request是默认参数,'form.html'是指定的文件名
? ? 由此可以达到前后端分离的效果,前端人员专注于html页面编写
? ? 后台处理由python完成
? ? 3.HTML模版加载 css、js、img等静态文件问题:
? ? 参考资料:https://www.cnblogs.com/yjq520/p/8990783.html
1.创建目录:在我们的项目中创建静态文件存放目录,HelloDjango目录下创建文件夹 static,
? ? ? ? ? 然后在 static文件目录中新建 js、css、images三个文件夹用于存放静态资源文件
? ? ? ? 2.设置静态文件目录:打开文件 settings.py,在该文件中查找变量 STATIC_URL,在该变量下添加如下代码:
? ? ? ? ? ? STATIC_URL = '/static/'
# STATIC_URL定义了 web服务链接媒体的 URL地址,STATICFILES_DIRS允许自定义新的 static目录。
? ? ? ? ? ? STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
os.path.join(BASE_DIR, "recommend", "static"),
]