Django框架_day01
文章目录
- 基于wsgiref模块
- 自定义简易版本web框架请求流程图
- python三大主流web框架
- 注意事项
- django基本操作
- 小白必会三板斧
- 正式内容
- 静态文件配置
- request对象方法初识
- pycharm连接数据库(MySQL)
- django链接数据库(MySQL)
- 字段的增删改查
- 数据的增删改查
基于wsgiref模块
'''
1.帮助你封装了socket代码
2.帮你处理http格式的数据(封装成了大字典 从字典对应的键值获取你要的数据 例如url路径)web服务网关接口1.请求来到时候帮助你自动拆分http格式数据并且封装成非常方便处理的数据格式2.响应走的时候帮你将数据再次打包成符合http协议的格式
'''
* 根据功能的不同拆分成不同py文件(关键)**urls.py**路由与视图函数对应关系**views.py** (后端业务逻辑 什么url匹配什么 html文件返回)业务逻辑的视图函数**templates模板文件夹**存储html文件 (若是不存储html文件 则所有的文件都要写在views.py 里面 代码会十分的拥杂)# 拆分完成后 后续要想添加功能 只需要在urls.py 和 views.py中书写对应的代码即可
'''
'''
* 动静态网页
判断依据就是是否能从后端数据库中获取数据放在页面中展示出来如何将后端的数据传递给html文件 (后端的数据是在后端添加给html文件中 再将该html文件给浏览器 浏览器是无法识别后端代码的)1.lowb版本 利用字符串的替换2.jinjia2 模板语法{{ user_list }}{{%for i in user_list % }}{%enfor
'''
自定义简易版本web框架请求流程图
'''
wsgiref 模块1.请求来的时候解析http格式的数据 封装成大字典2.响应走的时候给数据打包成符合http格式 再返回给浏览器
'''
python三大主流web框架
'''
django特点: 大而全 自带的功能特别特别的多 类似于航空母舰不足之处:有时候过于笨重flask特点:小而精 自带的功能特别特别少第三方模块特别特别的多 如果将flask第三方模块加起来完全可以盖过django并且也越来越像django不足之处:比较依赖于第三方的开发者tornado特点:异步非阻塞 支持高并发可以开发游戏服务器
'''
注意事项
1.计算机的名称不能有中文
2.一个pycharm窗口只开一个项目
3.项目里面所有的文件也尽量不用出现中文# diango版本问题
1.x 2.x 3.x (直接忽略)
1.x 和 2.x本身插件也不大
公司之前用的1.8 慢慢过渡到1.11版本 有一些项目用的2.0# django安装pip3 install django==1.11.11
django基本操作
# 命令行操作# 1.创建django项目'''你可以先切换到对应的盘 然后再创建'''django-admin startproject 项目名# 2.启动django项目'''一定要先切换到项目目录下'''python3 manage.py runserver# 3.创建应用'''一定要先切换到项目目录下'''python manage.py startapp app01# 4.注册在配置文件settings.py文件里的INSTALLED_APPS里面添加'应用名.apps.App01Config' 代表着注册
小白必会三板斧
'''HttpResponse'''返回字符串类型的数据return HttpResponse('你好好 django新人')'''render'''返回html页面return render(request, '14_图书管理系统.html') // 两个参数render 传值的两种方式'''user_list = ['123','sdfds',{"zrf":18}]# 第一种传值方式 用字典的形式传过去 键随便取 跟上要传的变量# return render(request, '两种传参方式.html',{'data':user_list})# 第二种传值方式# locals() 会将所在空间中所有的名字全部传递给html页面 适合需要传递的数据特别的多return render(request, '两种传参方式.html', locals())''''''redirect'''重定向return redirect("https://www.mzitu.com") # 既可以重定向跳到别的网址return redirect('/home/') # 也可以跳到自己
正式内容
静态文件配置
'''
我们将html文件默认都放在templates文件夹下
我们将网站所使用的静态文件默认都放在static文件夹下静态文件前端已经写好了的 能够直接调用使用的文件网站写好的js文件网站写好的css文件网站用到的图片文件第三方前端框架...拿来就可以直接使用的
'''
* django默认是不会自动创建static文件夹 需要你自己手动创建
一般情况下我们在static文件夹内还会做进一步的划分处理-static-js-css-img其它第三方文件在浏览器中输入url能够看到对应的资源
是因为后端提前开设了该资源的接口# 静态文件配置'''
---------------------------------------------------
当你在写django项目的时候 可能会出现后端代码修改了但是前端页面没有变化的情况1. 你在同一个端口开了好几个django项目一直在跑的其实是第一个django项目2.浏览器缓存的问题settingsnetworkdisable cache 勾选上
---------------------------------------------------
'''静态文件配置
'''
STATIC_URL = '/static/' # 类似于访问静态文件的令牌
如果你想访问静态文件 你就必须以static开头/static/bootstrap-3.4.1-dist/css/bootstrap.min.css/static 只有路径前缀符合 STATIC_URL = '/static/' 的令牌 才会允许你从上往下找列表里面存放的
bootstrap-3.4.1-dist/css/bootstrap.min.css
若是找完了 还是没有就会报错STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')
]
'''
动态解析static
{% load static %} <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}"><script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.min.js' %}"></script>
在前期使用django提交post请求的时候 需要取配置文件中注释一行代码
MIDDLEWARE = [
‘django.middleware.security.SecurityMiddleware’,
‘django.contrib.sessions.middleware.SessionMiddleware’,
‘django.middleware.common.CommonMiddleware’,
# ‘django.middleware.csrf.CsrfViewMiddleware’,
‘django.contrib.auth.middleware.AuthenticationMiddleware’,
‘django.contrib.messages.middleware.MessageMiddleware’,
‘django.middleware.clickjacking.XFrameOptionsMiddleware’,
]
request对象方法初识
def login(request):print(request.method) # 获取 请求方式 是全大写的字符串形式if request.method == "POST":# 这里应该获取前端form表单传回来的数据print(request.POST)username = request.POST.get('username') # .get()获取到的是字符串 且若该name值有多个input标签 那么get只拿最后一个值password = request.POST.getlist('password')[0] # .getlist()方法获取到的是列表 print(username,'\n',password)return HttpResponse("收到了 老弟")t = "来了老弟"return render(request, 'login.html', {'data': t})''' request.GET 的使用与 POST的一模一样 都有.get() .getlist()'''
get 携带的数据是有大小限制的 大概好像4KB左右
post 则没有限制
pycharm连接数据库(MySQL)
三个位置查找数据库相关右侧上方database左下方database配置里面的plugins插件搜索安装pycharm可以充当很多款数据库软件的客户端
django链接数据库(MySQL)
# 默认用的是sqkite3
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}
}# django链接MySQL1.第一步配置文件中配置DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', 将.splite3改为mysql'NAME': "django_day01", # name写数据库表的表名'USER':"root","PASSWORD":"x4305232001","HOST":"127.0.0.1","PORT": 3306,"CHARSET":"utf8"}
}
Django ORM
'''
ORM. 对象关系映射
作用: 能够让一个不用sql语句的小白也能够通过python 面向对象的代码简单快捷的操作数据库
不足之处: 封装程度太高 有时候sql语句的效率偏低类 表对象 记录对象属性 记录某个字段对应的值应用下面的models.py文件
'''
# 1.先去models.py中书写一个类class User(models.Model):id = models.AutoField(primary_key=True) # 等价于 id int primary_key auto_incrementusername = models.CharField(max_length=32, verbose_name='用户名') # 等价于 username varchar(32)'''CharFIeld必须要指定max_length参数 不指定直接报错verbose_name该参数是所有字段都有的参数 就是用来解释字段的 '''password = models.IntegerField() # password intclass Author(models.Model):# 当你不定义主键字段的时候 orm会自动帮你创建一个名为id主键字段# 也就意味着 如果对于主键没有额外的叫法 可以让它帮你自动创建username = models.CharField(max_length=32)password = models.IntegerField()****************2.数据库迁移命令***************************
1.python manage.py makemigrations 将操作记录记录到小本本上(migrations文件夹)2.python manage.py migrate 将操作真正的同步到数据库里面
'''
输入完该命令后 django会自动创建很多个表 应用名_表名的才是我们创建的 其它的表是必须要的)app01_user 因为一个项目可能有多个应用 可能会出现相同名字的表 因此加上前缀应用名 用来区分# 只要你修改了models.py中跟数据库相关的代码 就必须重新执行上述两条命名
'''
只要动了models.py中跟数据库相关的代码 就必须执行那两条代码
字段的增删改查
每次执行那两条命名 django会判断models.py里面的数据跟现在表一样 若不一样(增删改操作)就对应处理表格 若相同则不会有什么改变
# 字段的增加1.可以在终端内选择1 然后给出默认值2.设置该字段可以为空info = models.CharField(max_length=32, verbose_name="个人简介",null=True)3.直接给字段设置默认值hobby = models.CharField(max_length=32, verbose_name="兴趣爱好", default="泡妹")# 字段的修改直接修改代码然后执行数据库迁移的两条命名即可!# 字段的删直接把对应的字段注释掉就行了执行完毕之后字段对应的数据也就没有了
'''
在操作models.py的时候一定要细心千万不用注释一些字段执行迁移命令之前最好先检查一下自己写的代码
数据的增删改查
# 今天只介绍一点点# 查
user_obj = models.User.objects.filter(username=username).first(); # 加上.first() 只取第一个# 等价于 select * from user where username='jason' limit 1;
可以用索引[0]的方式代替.first() 不过不推荐
filter括号内可以携带多个参数 参数与参数之间默认是and联系
你可以把filter联系成where记忆'''
# 增# 第一种增加# 该方法有一个返回值 返回值就是当前创建的数据对象本身res = models.User.objects.create(username=username, password=password,age=19)print(res) # 这里打印的res对象 就是之前定义好的__str__方法里面的输出# 第二章增加# 先生成一个类对象user_obj = models.User(username=username,password=password)# 对象调用save方法user_obj.save() # 保存数据# 查# 去数据库中查询数据# 返回的结果是一个querySet对象 你可以把它想象成列表套数据对象user_obj = models.User.objects.filter(username=username).first() # 加上.first() 只取第一个# 等价于 select * from user where username='jason';
'''
Django框架_day01相关推荐
- Django框架之第二篇
Django框架之第二篇 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中). view ...
- Windows上python开发--2安装django框架
Windows上python开发--2安装django框架 分类: 服务器后台开发2014-05-17 21:22 2310人阅读 评论(2) 收藏 举报 python django 上一篇文章中讲了 ...
- Python技术学习之Django框架设计思想
Python是目前比较流行的计算机编程语言,据用丰富和强大的库,被称为胶水语言,能够把用其他语言制作的各种模块很轻松地联结在一起. Python功能强大,用途广泛,可广泛应用于云计算.web开发.科学 ...
- django框架使用mysql报错,及两种解决方法
1.django框架 settings.py文件中部分代码: DATABASES = {# 'default': {# 'ENGINE': 'django.db.backends.sqlite3',# ...
- django框架--路由系统
目录 一.路由系统理解 二.路由系统功能划分 三.路由表创建 创建工具 二级路由 路由别名 动态路由及重定向 四.自定义错误页面 五.图示路由系统在框架中的定位 六.路由系统的进阶想法 一.路由系统理 ...
- Python3搭建Django框架浅析
前言 Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django 是一个开放源代码的 Web 应用框架,由 Pyt ...
- Django框架学习索引
索引目录 1.Django介绍与安装 2.Django流程及模式 3.Django基本配置 4.Django模板(Templages) 1.Django的介绍和安装 3.Django框架模式 4.数据 ...
- Django 框架入门篇(安装与创建项目)
什么是Django框架? 官方定义:Django是一个高级Python Web框架,鼓励快速开发和简洁实用的设计.它由经验丰富的开发人员构建,可以解决大部分Web开发的麻烦,因此您可以专注于编写应用程 ...
- 第九章 Django框架——csrf请求伪造和csrf_token使用
第九章 Django框架--csrf请求伪造和csrf_token使用 一.csrf请求伪造 二.csrf_token使用 三.简单的csrf_token应用 四.Ajax使用csrf_token 一 ...
- Python Django框架入门第一课
Python Django框架入门 1.Django简介 Django使用python开发的一个免费的Web框架,几乎囊括了Web应用的方方面面,用于快速搭建高性能.优雅的网站. 2.配Django运 ...
最新文章
- NDK断点无法调试Unable to detect application ABI's
- 使用AdMob实现广告统一
- Flutter 如何禁止手机横屏[Flutter专题62]
- CentOS 5.x 系统下使用yum 升级php到5.2.x
- mybatis一套完整入门教程
- C语言和设计模式(观察者模式)
- 关于as400的基于关键字编译大揭秘
- TIOBE 2 月编程语言排行榜:Python 逼近 C,Groovy 重回 TOP20
- php处理excel类,30 个 PHP 的 Excel 处理类
- python项目方案书-前端python解释器方案预研
- 声网 直播SDK小结
- lseek()函数详解
- DatePicker 设置最小日期是当前时间报错:java.lang.IllegalArgumentException: fromDate:xxx does not preced toDate: xx
- 计算机按键截图,截图按什么键,电脑按哪个键是截屏
- 汽车车载智能终端T-BOX
- HC74h595 串行输出再进行串口输出(串行通信嵌套)已测试成功。
- iOS-xcode模拟器录屏
- 【唐诗学习】一、古诗概述
- MYJ2C一款java2c混淆工具 java代码转C代码 交叉编译windows,linux,mac系统动态链接库
- echarts:从github及其镜像下载china.js和china.json
热门文章
- 我的世界神级种子Java_单机生存必备 我的世界神级种子推荐
- OOAD 3 迭代、进化和敏捷(Iterative,Evolutionary,and Agile)
- 随笔-自控概率的大转盘抽奖
- python中group是啥_python中group和groups函数的区别
- flash player 11.2 64位 linux,Flash Player 11.2新版发布
- php 月初时间,php 月初,月末时间大统计
- 喉炎在临床上的症状表现
- java二维码生成工具,可直接用于生产
- 【原创】自制操作系统知识储备(一)---流程篇
- 一款基于RFID的固定资产管理系统