目录

  • 路由相关

    • 路由介绍

      • 路由访问时不加斜杠,内部会重定向加斜杠的路由
  • 静态文件相关
    • html引入外部资源的方式
    • 静态文件配置
  • form表单相关
    • form表单数据提交数据的两种方式
    • form提交数据的地址如何指定
    • form表单数据的提交方式的更改
    • 根据客户端请求方式的不同-执行不同的逻辑代码
    • 如何获取客户端提交的form表单数据
  • django连接数据库相关
    • 使用django连接数据库必须完成两个步骤
  • ORM相关
    • 什么是ROM
    • 数据库迁移(同步)命令 (****************)
    • ROM中对于数据库数据的增删改查
      • 新增数据
      • 查询数据
      • 修改数据
      • 删除数据
  • 页面跳转

由写一个登录页面的前后端来引出知识点

路由相关

路由介绍

可以将其视为网址 http://127.0.0.1:8000/login

路由访问时不加斜杠,内部会重定向加斜杠的路由

http://127.0.0.1:8000/login如此发送给到服务器的get数据中的路由字段为 login,但是django中urls的路由与试图映射的数据是 login/ 是带有 / 斜杠的,这时首先会拿login到服务端比对,若没有则加上 / 斜杠再进行比对(http://127.0.0.1:8000/login/),有则进入页面,无则报错

静态文件相关

所有的html文件默认都写在templates文件夹下

所有静态文件(CSS,JS, 前端第三方类库)默认都放在static文件夹下,这个文件夹需要自己手动创建,创建在跟app/项目同层的文件夹

html引入外部资源的方式

cdn

本地

静态文件配置

# 在settings文件中找到STATIC_URL:# 接口前缀,跟静态文件夹一点关系都没有,默认情况下这个前缀跟静态文件夹名字一样!!!
STATIC_URL = "/static/"  # 这个static是用来识别路由的后缀的
STATICFILES_DIR = [os.path.join(BASE_DIR, "static")  # 这个static是用来拼接文件夹路径的,上面的识别成功,然后走下面的路径去找数据os.path.join(BASE_DIR, "static1") os.path.join(BASE_DIR, "static2")
]# ps:会依次查找列表中所有的静态文件路径,找到的话立刻停止,都没有找到返回404

form表单相关

form表单数据提交数据的两种方式

<input type="submit">
<button></button>

form提交数据的地址如何指定

由form标签中的action属性控制提交地址
方式:1、全路径<form action="http://127.0.0.1:8000/login/"></form>2、只写路径后缀<form action="/login/"></form>3、不写(默认往当前路径提交)

form表单数据的提交方式的更改

提交方式有两种:get | post
form表单默认的是get请求但是get请求会造成用户隐私(重要信息)显现在路由上,而post提交方式则不会
更改form表单提交方式的方法:由form表单中的method属性控制提交方式:<form action="" mothod="post"></form>

根据客户端请求方式的不同-执行不同的逻辑代码

def login(request):  # 用户端提交的数据全部都在request中,包括请求方式,还有用户个人数据,以及路由地址等等# 获取用户端提交的请求方式print(request.mothod):if request.method == "POST":  # 拿到的请求方式是全大写的字符串return HttpResponse("OK")return render(request, "login.html")  # 在此之上应为post请求的逻辑代码

如何获取客户端提交的form表单数据

def login(request):if request.mothod == "POST":print(request.POST)  # 将其当成一个大字典即可,里面存放了客户端post提交的所有数据# request.POST:< QueryDict: {'username': ['jason'], 'password': ['123']} >print(request.POST.get("username"))  # jason  # 虽然上面的username的value是一个列表,但是却拿到了一个字符串,原因是此处的 .get()方法默认只会取value列表最后一个元素'''若request.POST数据中的value列表有多个值:request.POST:<QueryDict: {'username': ['jason', 'egon'], 'password': ['123']}>当form表单中有多选的数据是就需要把值全部取出来,那么就要用到:.getlist()'''print(request.POST.getlist("username"))  # ['jason', 'egon']  # 想要一次性获取value列表里面的所有数据需要用到 getlist()print(request.POST["username"])  # 不推荐使用此方法获取数据return HttpResponse("OK")return render(request, "login.html")'''
总结:获取value列表中的所有元素需要使用getlist  应用场景:用户的爱好 多选框get 只会获取到value列表中的最后一个元素
'''

django连接数据库相关

使用django连接数据库必须完成两个步骤

# 第1步:需要修改配置文件
# 找到settings文件中的 DATABASES
# 将其修改为:
DATABASES = {"default":{"ENGINE":"django.db.backends.mysql","NAME":"day54",  # 此为要连接的库名"HOST":"127.0.0.1","POST":3306,"USER":"root","PASSWORD":"123"}
}ps:键都必须为大写
# 第2步:告诉django用pymysql替换他默认的mysqldb模块来连接数据库
# 可以写在:1、项目文件夹下面的__init__.py2、也可以在app应用文件夹下面的__init__.py# 固定写法
import pymysql
pymysql.install_as_MySQLdb()  # 告诉django用pymysql代替mysqldb连接数据库

ORM相关

什么是ROM

对象关系映射类   >>>   表对象   >>>   表记录对象的属性   >>>   一条记录某个字段对应的值django的orm不能够自动创建库,但是可以自动创建表
ps:一个django项目就使用一个库,不要多个django项目使用一个库

数据库迁移(同步)命令 (****************)

# 此命令分为分布,有1必有2,必须配合执行: 在终端中运行
python3 manage.py makemigrations  # 将你的数据库变动记录到一个小本本上(并不会帮你创建表)
python3 manage.py migrate  # 将你的数据库变动同步到数据库中

ROM中对于数据库数据的增删改查

新增数据

# 操作数据库user表插入数据
# 方式一:
# user_obj = models.User.objects.create(字段1=字段1的值, 字段2=字段2的值...)  # 伪代码
user_obj = models.User.objects.create(name=username,password=password)# 方式二:
# user_obj = models.User(字段1=字段1的值, 字段2=字段2的值...)  # 伪代码
user_obj = models.User(name=username, password=password)
user_obj.save()  # 对象调用sava方法保存到数据库

查询数据

user_list = models.User.objects.all()  # 获取user表所有的数据
# 只要是QuerySet对象,就介意点query查看到当前QuerySet对象的内部sql语句
print(user_list.query)  # select id,name,password form user;查询数据需要注意的是 你想要获取QuerySet对象还是一个数据对象
user_query = models.User.objects.filter(id=edit_id).first()  # 如果你是要获取数据对象那么 .first()别忘了
.filter()当条件不存在的情况下会返回一个空的QuerySet对象
<QuerySet []> <class 'django.db.models.query_QuerySet'>
user_obj = models.User.objects.get(id=edit_id)  # 用get可以直接获取到数据对象本身,但是查询条件不存在的情况下会直接摆错QuerySet对象支持索引取值,但是不推荐使用,推荐使用自带的 .first() 来获取第一条数据

修改数据

# 编辑对象的id的获取方式
# 方式一:利用input隐藏一个标签
<input type="hidden" name="edit_id" value="a{{ user_obj.pk }}">
# 方式二:将数据放到form表单发送数据的路由地址的后缀中去
<form action="/edit/?edit_id={{ user_obj.pk }}" method="post"># 注意:QuerySet对象点修改|删除会作用与对象内部所有的数据对象  类似于批量操作
方式一:models.User.objects.filter(id=edit_id).update(name=username,password=password)
方式而:user_obj = models.User.objects.filter(id=edit_id).first()user_obj.name = usernameuser_obj.save()

删除数据

models.User.objects.filter(id=1).delete()  # 会将QuerySet所有的数据对象全部删除

一旦修改模型层里面跟表相关的所有数据(models.py中的与表对应的类),就必须重新执行数据库迁移命令

Python3 manage.py makemigrations # 记录到小本本

python3 manage.py migrate # 真正操作数据库

页面跳转

利用a标签href属性 可以指定页面跳转的路径  href可以写全路径 但推荐写后缀即可
<a href="/reg/" class="btn btn-success">添加数据</a>
# 注意 路径的书写一定要加斜杠重定向  可以写别人的网址  也可以是自己的路径
return redirect("/userlist")
return redirect("/userlist/")

转载于:https://www.cnblogs.com/shuchengyi/articles/10986947.html

django相关操作相关推荐

  1. Django相关操作(连续跳转和登录注册为例)

    虚拟环境的安装(VIRTUALENV) 安装virtualenv pip install virtualenv 创建虚拟环境 在本地创建一个叫env的文件夹,并且Cd到该文件夹下输入: virtual ...

  2. Django 数据库相关操作 (六)

    前言 上篇已经介绍过模型相关操作,并创建好了数据库及相关表字段,接下来将通过以下表在Django中进行表数据的增删改查. from django.db import modelsclass Stude ...

  3. Django ORM操作

    Django ORM操作 一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果<2> get(**kwargs): 返回与所给筛选条 ...

  4. Django - ORM操作

    Django - ORM操作 一. 必知必会13条 单表查询之神奇的双下划线 二. ForeignKey操作 正向查找 反向操作 三. ManyToManyField 四. 聚合查询和分组查询 聚合 ...

  5. Day 07 DjangoORM相关操作(增删改查)

    Day 07 DjangoORM相关操作(增删改查) 前提条件:配置数据库 **PROJECT.settings**.py DATABASES = {'default': {'ENGINE': 'dj ...

  6. django数据库操作和中间件

    数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...

  7. 2021年大数据HBase(五):HBase的相关操作JavaAPI方式

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-JavaAPI方式 一.需求说明 ...

  8. 2021年大数据HBase(四):HBase的相关操作-客户端命令式!【建议收藏】

    全网最详细的大数据HBase文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HBase的相关操作-客户端命令式 1.进入HBase ...

  9. 2021年大数据Spark(二十五):SparkSQL的RDD、DF、DS相关操作

      目录 RDD.DF.DS相关操作 SparkSQL初体验 SparkSession 应用入口 获取DataFrame/DataSet 使用样例类 指定类型+列名 自定义Schema ​​​​​​​ ...

  10. 【数据结构】二叉树及其相关操作

    二叉树的定义 二叉树是一个由结点构成的有限集合,这个集合或者为空,或者由一个根节点及两棵互不相交的分别称作这个根节点的左子树和右子树的二叉树组成. 二叉树并非一般的树形结构的特殊形式,它们是两种不同的 ...

最新文章

  1. 移动端 html2canvas 踩坑记录
  2. mkdir创建递归目录
  3. C++ struct constructor
  4. Android系统中的进程管理:进程的优先级
  5. 缓存目录的区别getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir()的作用
  6. Qt 程序打包发布总结
  7. matlab时域转复频域,信号与系统实验(MATLAB版)实验15连续系统的复频域分析.ppt...
  8. (干货!)Tomcat性能优化
  9. matlab学习路线
  10. Spring揭秘 — IoC
  11. Flutter入门系列-VideoPlayer在列表使用
  12. 【GitHub Desktop】(GitHub Windows桌面版) 中文汉化,(GitHub客户端汉化,非网页端插件)
  13. 高效的睡眠——睡眠革命
  14. 小马哥robofly四轴代码解读:PWM电机输出
  15. 吊炸天核心Java面试问题,一问一答题,一问多答题(建议学习)
  16. 阿里云服务器完全卸载AliYun监控教程
  17. 静态页面 常见问题 margin-top塌陷、padding把盒子撑大
  18. 记录大坑:用Xamarin引入UHF读写器dll,报错: 所生成项目的处理器架构“MSIiL”与引用的Reader.dll处理器架构“x86”不匹配
  19. closed Stream.解决办法
  20. ERP管理 | 实现企业资金流、信息流和物流一体化的快速发展

热门文章

  1. Flutter实战之Hello Flutter
  2. mdac版本过低怎么解决_工业铝型材硬度过低怎么解决
  3. Log4j2 Zero Day 漏洞 Apache Flink 应对指南
  4. 计算机应用基础演讲怎么开口,计算机应用基础讲课稿
  5. 工程图样中粗实线的用途_电气工程图的一般特点、设计规范
  6. python---post请求时其中dict中套有json
  7. python海龟交易源码_大部分人都不知道-Python竟能画这么漂亮的花,帅呆了
  8. dbeaver查看执行计划_SAP学习基础篇(52):PP模块-物料需求计划
  9. 解析复杂结构的json文件的时候,快速生成结构体--golang
  10. 填报true\false和复选框应用及导出打印显示复