Django简单配置与增删改查
静态文件资源
| 1.首先我们需要先编写一个登录功能 |
| 1.创建一个Django项目并创建个app |
| 2.在urls.py添加一组对应关系(首先需要先导入我们文件所在的位置) |
| 3.在app的vires.py中编写登录核心逻辑 |
| 4.利用三板斧与前端做交互 |
| |
| 2.我们在使用浏览器访问Django框架可以拿到数据是因为我们提前在配置文件中添加了对应的接口,但是当资源没有显示出内容,那么我们可以看一下对应关系是否配好,打开urls.py查看和进行配置 |
| |
| 3.静态文件 |
| html页面上使用的不经常改变的资源 |
| 1. 第三方框架文件 |
| 2. CSS文件 |
| 3. JS文件 |
| 4. 图片文件 |
| 针对静态文件资源一般都会放在static文件夹内 |
| |
| 4.当static目录下出现了很多不同类型的静态文件的话那么我们就应该将他进行再次分类管理例如(CSS文件归一类,JS文件归一类等方便我们查找) |
| others文件夹 |
| 存放第三方框架文件 |
| CSS文件夹 |
| 存放所有的CSS文件 |
| JS文件夹 |
| 存放所有的JS文件 |
| img文件夹 |
| 存放所有的img文件 |
静态文件配置
| 1.针对静态文件资源的访问其实也需要开设相应的接口(在SETTING文件夹中修改配置) |
| STATIC_URL = '/static/' |
| STATICFILES_DIRS = [ |
| os.path.join(BASE_DIR,'static') |
| ] |
| |
| 2.接口前缀 |
| STATIC_URL = '/static/' |
| |
| 3.动态解析 |
| 动态解析其实就是我们无论写成怎样的前缀只要调用我们的数据那么就会自动帮我们跳转使用成当前接口 |
| [% load static %] |
| <link rel='stylesheet' href="[% static'bootstrap-3.4.1-dist/css/bootstrap.min.css'%]"> |
form表单注意事项
| 1.GET请求 |
| 向客户端索要数据,同时可以携带一些额外的数据传入 |
| 直接会在网页端显示url?xxx=nnn&zzz=yyy&name=joseph |
| 携带数据拥有两个限制 |
| 1. 数据只能是一些无关紧要的非敏感型数据 |
| 2.数据大小限制只能有2KB~4KB左右 |
| |
| 2.POST请求 |
| 向客户端提交数据,并展示,同样也可以携带一些额外数据 |
| 数据都是放在请求体中并且数据大小没有限制,不是所有的请求都有请求体 |
| |
| 3.form表单默认的数据提交方式是get |
| method='POST'(get也可以是指定提交方式) |
| action 控制数据的提交地址 |
| 方式一:不写,朝当前页面所在的地址提交 |
| 方法二:写后缀 /index/ 系统会自动帮你补全ip和port |
| 方法三:写全称 http://www.jd.com/ |
| |
| 4.提交post请求前期需要去配置文件中注释一行代码 |
| 以防止出现403的情况 |
| 全局生效:下方那个的是个中间件 |
| MIDDLEWARE = [ |
| |
| ] |
| 局部生效: |
| @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。 |
| @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。 |
| 写法如下: |
| from django.views.decorators.csrf import csrf_exempt,csrf_protect |
| @csrf_exempt |
| def index(request): |
| |
| 5、Django中使用ajax做post提交防止出现403错误的方法 |
request对象方法
| 1. request.method 获取请求方式结果是纯大写的字符串 |
| 2. request.POST 获取POST请求发哦送那个来的普通数据(不包括文件) |
| request.POST.get() 默认只获取列表中最后一个数据值,虽然内部获取的是个列表但是其实是个字符串 |
| request.POST.getlist() 获取键对应的整个列表。无论鸡哥数据值都会获取过来 |
| 3. request.GET 后去url后面携带的非敏感数据 |
| request.GET.get() 默认值获取列表中最后一个数据值 |
| request.GET.getlist() 获取键对应的整个列表无论有几个数据值 |
pycharm链接MySQL
| 1.查找pycharm提供的database按钮 |
| 左下角和右边的侧边框都有database按钮 |
| |
| 2.如果没有的话那么就需要下载插件,如果不成功那么就需要考虑重新装一下pycharm,在IT行业有句精髓的话,重启和重装可以解决百分之九十五的故障和报错 |
| file >>>: plugins >>>: database下载 |
| |
| 3.首次连接数据库需要下载对应的驱动 |
| database >>>: Data Source >>>: 选择MySQL >>>: donwlode即可 |
| |
| 4.简单的增删改查 |
| 鼠标点点点的方式修改,上访的加号添加一行,然后填入数据就是增加数据,修改数据最后记得一定要点击绿色箭头上传数据否则没有任何更改 |
Django链接MySQL
| Django默认使用的数据库是sqlite3这款数据库比较小,一般我们只用它在本地测试,功能比较少,所以我们一般还是使用MySQL当做数据库 |
| |
| 1.配置文件中修改数据 |
| DATABASES = { |
| 'default': { |
| |
| |
| 'ENGINE':'django.db.backends.mysql', |
| 'NAME': 'django_day2', |
| 'USER': 'root', |
| 'PASSWORD': '', |
| 'HOST': '127.0.0.1', |
| 'PORT': 3306, |
| 'CHARSET': 'utf8' |
| } |
| } |
| |
| 2. 指定连接MySQL的模块 |
| Django1.11版本需要在项目或者应用目录下的__init__.py中编写一行代码 |
| import pymysql |
| pymysql.install_as_MySQLdb() |
| Django2.2以上版本需要添加mysqlclient模块 |
| 直接下载即可 |
| django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APP |
| 如果遇到这个报错那么在cmd中输入python manage.py shell就可以解决 |
Django ORM简介
| ORM:对象关系映射 |
| ORM的存在是为了帮助那些不会使用MySQL的python程序员利用python语法的方式来简单快捷的操作MySQL |
| |
| 类 映射成 表 |
| 对象 映射成 记录 |
| 对象点属性 映射成 字段对应的值 |
| |
| 1. 先去应用目录下的models.py中编写模型类也就是搭框架 |
| class User(models.Model): |
| id = models.AutoField(primary_key=True) |
| |
| |
| name = models.CharDield(max_length=32) |
| |
| |
| pwd = models.IntegerField() |
| |
| |
| |
| 2.数据库迁移/同步命令 |
| 1.将models中的有关数据库的操作记录下(migrations文件夹) |
| python38 manage.py makemigrations |
| 简写:makemigrations |
| 2.将操作真正影响到数据库中 |
| python manage.py migrate |
| 简写:migrate |
| 当修改了models中与数据库相关的代码都必须执行上树的命令并且两步都需要执行(在Terminal中),可以简写也可以指定应用单独迁移 |
| |
| 3.表的主键在orm中可以不写orm会自动帮你添加一个id的主键,如果你需要的主键不叫id那么你可以自己定义主键,但是一般为id |
数据的增删改查
| 1.查 |
| models0User.objects.filter() 结果可以看成是一个列表套数据对象 |
| 如何获取对象 可以使用first()方法 如果没有值的话那么就会返回None 我们if判断即可 |
| |
| 2.增 |
| models.User.objects.cerate() |
| |
| 3.改 |
| models.User.objects.filter(id=x).update(需要更改的数据='更改后的数据') |
| |
| 4.删 |
| models.User.objects.filter(id=x).delete() |
ORM外键关系
| 1.MySQL的对应关系 |
| 一对多 |
| 外键字段建在多的一方 |
| 多对多 |
| 外键是创建在第三张表中存储两张表之间的关系 |
| 一对一 |
| 外键创建在使用频率较高的那张表中 |
| |
| 2.ORM的对应关系 |
| 一对多 |
| 外键也是创建在多的一方 |
| publish = models.ForeignKey(to='Publish',on-delete=models.CASCADE) |
| |
| 多对多 |
| 外键可以直接在表中编写即可orm会自动帮你创建第三张表用来存储你创建的两张表之间的对应关系 |
| authors = models.ManyToManyfield(to='Autjors') |
| 一对一 |
| 外键字段一样建在查询频率较高的那张表中 |
| detail = models.OneToOneField(to='AuthorDetail',on-delete=models.CASCADE) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)