Django学习笔记
目录
遗留问题
- 管理员模块重置密码
错误合集
错误:python manage.py makemigrationsc成功后python manage.py migrate报错1193, “Unknown system variable ‘default_storage_engine‘“
原因:当时使用mysql5.0,版本过低与Django不匹配,需换成5.5以上
解决办法:卸载原MySQL5.0,安装5.7,具体步骤参考
参考网上意见选择Navicat Premium 12与MySQL5.7匹配
错误:先打开Navicat后打开注册机导致激活失败
解决办法:卸载Navicat重装,然后先进行激活,具体步骤参考
Navicat Premium 12安装包和注册机打包下载
链接:https://pan.baidu.com/s/1gg9WZOqZevAk4V5J87FJbg
提取码:3m0kMySQL5.7打包
链接:https://pan.baidu.com/s/1IEtaZN8JFcVlqOunx1E6Bw
提取码:23b5
错误:执行以下代码时未成功删除
原因:未把orm一整个函数执行完整
解决办法:访问网页完成整个函数的访问
错误:安装完mysqlclient库后import mysqlclient成功但是运行时报错缺少mysqlclient模块
原因:未探索
解决办法:import MySQLdb
一、Django是什么?
Django是一个开放
模型(model):是数据处理层,主要处理与数据相关的所有事务,例如数据的存取、验证和数据之间的关系。
模板(tempates):表现层,处理与表现相关的决定,例如文档和页面的显示。
视图(View):业务逻辑层,存取模型以及调取合适模板的相关逻辑,是模型和模板之间的桥梁。
二、Django架构处理请求的流程
1.客户端发来的HTTP请求被视为Django的请求对象。
2.URL分配器负责搜索并调用被请求的URL所对应的视图
3.被调用的视图根据情况使用模型或模板生成相应的对象
4.相应对象作为HTTP形影发回给用户
三、使用步骤
1.创建项目(后面启动时用什么方式创建就用什么方式启动)
Django中项目会有一些默认的文件和默认的文件夹
1.1 终端方式
- 打开终端(win+R)
- 进入项目目录
- 执行命令创建项目(未实验过,可能存在问题)
1.2 Pycharm方式(需要专业版,社区版没有这个功能)
1.3 两种方法对比
最标准的是使用命令行创建方式,pycharm方式在标准基础上加上了
[1]templates目录(可以删除掉)
[2]在setting.py中的TEMPLATES中给DIRS加上了内容,而标准版没有加(可以删除)
2.文件介绍
3.APP
创建app代码
四、快速上手
1.实现一些功能
1.1 注册app
1.2 编写URL和视图函数对应关系
render方法的作用——结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。通俗的讲就是把context的内容, 加载进templates中定义的文件, 并通过浏览器渲染呈现
- request:浏览器向服务器发送的请求对象,包含用户信息、请求内容和请求方式等。
- template_name:设重模板文件名,用于生成网页内容。
- context:对模板上下文(模板变量)赋值,以字典格式表示,默认情况下是一个空字典。
- content_type:响应内容的数据格式,一般情况下使用默认值即可。
- status:HTTP状态码,默认为200。
- using:设置模板引擎,用于解析模板文件,生成网页内容
- 导入views模块
- 添加对应关系
- 编写视图函数
1.3 启动Django项目
1.3.1 命令行启动
1.3.2 pycharm启动
2 templates模板
优先去项目根目录的templates中寻找(需要提前配置,不配置无效),然后根据app的注册顺序,在每个app下的templates目录中寻找
3.静态文件
在开发过程中一般将图片、css、js都当做静态文件处理
五、模板语法
其本质是在HTML中写一些占位符,由数据对这些占位符进行替换和处理
对于元组的循环
对于字典的循环
分支
{% if n1 == "韩超" %}
<h1>是韩超</h1>
{% elif n1 == "黄蓉" %}
<h1>不是韩超,是黄蓉</h1>
{% else %}
<h1>不是韩超,也不是黄蓉,是其他人</h1>
{% endif %}
六、数据库
1.ORM
ORM可以做
- 创建、修改、删除数据库中的表(无法创建数据库)
- 操作表中的数据
2.orm创建数据库
- 启动MySql服务
- 创建数据库
3.orm连接数据库
4.orm创建修改表结构
类创建表
修改表结构
5.orm增删改查
url.py中指定
在view.py中定义一个orm函数,实现对数据的增删改查
七、用户管理系统案例
1.步骤
1.1 url定向
1.2 view.py中定义函数
-
-
-
python manage.py startapp app01 INSTALLED_APPS=[ 'app01.apps.App01Config' ]
-
-
2. 静态文件管理
-
-
配置数据库连接settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '数据库名字', 'USER': 'root', 'PASSWORD': '密码', 'HOST': '127.0.0.1', # 哪台机器安装了MySQL 'PORT': 330X, } }
-
在app下的models.py中编写 ```python from django.db import models class Admin(models.Model): """ 管理员 """ username = models.CharField(verbose_name="用户名", max_length=32) password = models.CharField(verbose_name="密码", max_length=64) def __str__(self): return self.username class Department(models.Model): """ 部门表 """ title = models.CharField(verbose_name='标题', max_length=32) def __str__(self): return self.title ``` - 执行两个命令: ```python >>>python manange.py makemigrations >>>python manange.py migrate
-
3.部门管理
4.模板继承
5.用户管理
6.靓号管理
6.1 表结构
6.2 靓号列表
6.3 新建靓号
6.4 编辑靓号
6.5搜索手机号
-
-
-
查询匹配方式:
-
-
-
-
-
数字:
-
-
-
-
-
字符:
-
-
-
-
-
分页:
-
-
7.ModelForm和Bootsrap
7.1 modelform可以帮助生成HTML标签
7.2 插件
8. 管理员操作
8.1 添加管理员表
8.2 编辑管理员
8.3 删除和重置密码
9. 用户登录
9.1 用户认证
9.1.1 cookie和session
-
-
-
- 修正无状态&短链接的弊端
- 是保存在浏览器上的键值对
- 发送请求时自动携带
-
-
9.1.2 中间件处理
-
-
-
- 中间件是一个又一个类
- 执行时在中途被拦截,用户请求到达不了视图函数
- 在middelware中注册中间件
- 在中间件的process_request方法中,如果没有返回值则说明有访问权限可以继续往下走,如果有返回值则说明没有访问权限不能继续往下走
-
-
9.1.3 中间件实现登录校验
获取当前访问用户的session信息,如果能读到说明已登陆过
9.2 退出登陆
10. 图片验证码
10.1 生成图片
-
-
- 安装pillow库
-
- 创建一个内存中的文件,将图片内容写到内存文件中,在内存中把原始值获取到
- 使用pop的原因:在进行数据库用户名密码校验时,因为数据库中没有code字段,所以要在比较时将code剔除掉
-
10.2 验证图片
11. Ajax请求
11.1 浏览器向网站发送请求时:URL和表单形式
-
-
- GET
- POST
- 页面会刷新
-
11.2 基于Ajax向后台发送请求,不会刷新
-
-
- 依赖jQuery
- 编写Ajax代码
$.ajax({ url:"发送的地址", type:"post", data:{ 传递的参数 }, success:function(res){ console.log(res); } })
-
11.3 GET请求
-
-
-
$.ajax({ url:'/task/ajax', type:"get", data:{ n1:123, n2:456 }, success:function (res){ console.log(res); } def task_ajax(request): #测试发送的数据 print(request.GET) return HttpResponse("成功了")
-
-
11.4 POST请求
-
-
-
from django.views.decorators.csrf import csrf_exempt # 免除csrf token认证 @csrf_exempt def task_ajax(request): #测试发送的数据 print(request.GET) return HttpResponse("成功了")
-
-
11.5 Ajax请求的返回值
一般都会返回json格式
总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!