Django简单笔记
之前用Django写了一个简单的销售管理系统,使用之前是不曾了解Django的,相当于快速上手了一下。便想着记录一下,但一直拖延,正好今晚熬夜啥也不想干,不如随便写写。
0. 首先
Django的D不发音
对了,本人用的是pyCharm专业版,社区版好像是不能创建Django项目的
1. 创建项目
首先肯定是要创建项目啦。
创建项目可以按照Django中文网中的教程:Django博客开发教程。
按照步骤能实现欢迎页面即可。
2. 理解项目
创建完项目自然要看懂项目了, 不然怎么写呢。
然后我们来看项目结构(这是我写完的):
(用看图王翻车了。。)
- 根目录sales:就是根目录咯
- demo子文件夹:每个Django项目都有一个app,demo就是我的app名称,这个是在创建项目时自己设置的。
- demo下的migrations文件夹:放数据库迁移文件的,写项目不用手动改(可以忽略)
- demo下的models文件:很重要,这个文件里的每一个class(python)都对应数据库中的一张表
- (可以直接在这个文件里写class, 再执行
python manage.py makemigrations 和 python manage.py migrate
这样你的数据库也会有对应表,省了你用数据库创表
)
-- demo下的views文件:写后台功能的,一个函数对应一个功能。如:
- media文件夹:设置文件上传路径,图片上传、文件上传都会存放在此目录里,需要自己创建并在后续的settings.py文件中设置
- sales同名子文件夹:就三个文件用上了
- sales子文件夹下的__init__.py文件:Django默认数据库使用SQLlite,如果你换用MySQL需要改,教程有教:Django如何使用Mysql数据库
- sales子文件夹下的settings.py文件: 配置整个项目的,不然怎么在项目同名文件夹下呢
- sales子文件夹下的urls.py文件:姑且就是用来路由的
- salesvenv文件夹:一般不管
- static文件夹:和media文件夹一样,自己创建,放静态资源文件。如css,js,img啦。
- templates文件夹: 没有就自己创一个,模板文件夹,就是用来放前端html文件的。
3. 修改文件
在对项目结构了解之后,就可以开始对项目开始修改了。
首先贴个教程:通俗易懂Python Django网站开发绝对零入门(1小时入门)第一季
花一丢丢的时间就行
大致说一下实现一个功能的一般流程:
- 写页面
在templates文件夹里新建html文件,写html代码,使用的静态资源文件css等放在static文件夹里,如果css文件不生效,看下settings.py文件设置了static目录路径没。
html文件就照常引用:
settings.py文件:
2. 设置路由
页面写好了,如何通过浏览器到这个页面呢, 这就需要urls.py文件了
如:
例如你写了一个登录页,你想通过浏览器输入127.0.0.1:8000/login访问到之前写的登录页,那么你就可以如上图设置urls.py文件
path()第一个参数表示地址(不包括ip地址端口号),第二个参数表示路由,即当你浏览器输入这个地址时,后台去找对应功能。这里就是浏览器输入127.0.0.1:8000/login,后台去找views.py文件里的login函数
- 实现功能
路由指向了views.py文件,自然要去这个文件实现对应函数,以完成对应功能了,我们这里的功能就是输入地址访问页面
views.py里的login函数实现如下:
它一定要接收一个request参数的,必须return。render是渲染页面,第一个request参数必须,第二个参数就是之前写的html页面名称,还可以加其他参数,也可以其他返回形式,后说。
这样就完成了一个最简单的功能
4. 其它
- 后台数据/变量如何交给前端页面呢
方法一
render的第三个参数,看了上面b站的那个教程就知道了:
这是我是查询demo_custrom表所有数据并返回前端页面,可以看到context参数等于一个字典(python说法)
返回了前端如何使用数据呢:
介绍几个知识点:
1. {{ 字典的key }},对应我上图就是{{ ziduan }},取变量的值
2. {% Django命令 %},循环语句等等啦
tips:html代码里直接用上面两种,JavaScript代码里使用第一种需要用双引号或反引号括起来
如果同时还想用Vue实例里的数据,应该:{% verbatim %}{{ Vue实例数据 }}{% endverbatim %}
当然Django还有什么过滤器之类的,自行百度,反正我就只在处理中文数据时用一下
-
前端页面数据如何传给后台呢
这里我用了axios 教程: · Axios 中文说明 · 看云
就是发请求,传参数,成功后执行then函数。例如图中是对“user/”发送get请求,参数是键值对的形式,那么首先取urls.py文件里找path(“user/”, views.xxxx),再去相应的views.py文件里写对应函数接收数据:
数据接收:
get请求就是request.GET.get(‘前端传的key’)
post请求就是request.POST.get(‘前端传的key’) -
iframe Django 报错 Refused to display 'http://127.0.0.1:8000/ in a frame because it set 'X-Frame-Option
解决: venv中找到lib-site-package-django-conf-global_setting修改django.conf 中global_setting # Default X-Frame-Options header value X_FRAME_OPTIONS = 'SAMEORIGIN'
(1)DENY — 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
(2)SAMEORIGIN — 表示该页面可以在相同域名页面的 frame 中展示。
(3)ALLOW-FROM https://example.com/ — 表示该页面可以在指定来源的 frame 中展示 -
/ index表示localhost:8000/index, index表示localhost:8000/当前页面/index
-
login页面加载后 再由一个函数render login页面 页面不会刷新 想要传数据可以用json
views函数返回形式:return JsonResponse({‘flag’: flag})
前端接收:
axios
.get('/verify/',{
params: {
tableName: 'demo_admin',
username: this.username,
password: this.password,
}
}).then(function(response){
//
if(response.data.flag) {
}
});
想到再补充吧。。