Django文件配置|Request对象|连接MySQL|ORM|ORM关联

一、静态文件及相关配置

		1.编写一个登录功能
			1.先创建一个Django项目并且创建一个APP('注意setting中installed_app中添加app')
			2.在Urls.py中添加一组对应关系(新建一个接口就写一个接口)
			3.在App的views.py中编写登录核心逻辑
			4.利用三板斧与前端交互(HttpResponse\render\redirect)
			
		2.我们在访问Django框架资源的使用 之因为可以拿到数据 是因为提前在Urls.py中创建了对应的接口
			如果访问不到对应的资源那么说明就是没有开设相应的接口
		  
		3.静态文件相当于Html页面上不经常改变的资源
			针对静态文件资源一般也会进行分类都会新建一个Static文件夹内(第三方框架文件、Css文件、Js文件、图片文件)
			当Static目录下出现了很多不同类型的静态文件资源 那么还可以再细致的分类
			Others(第三方框架文件)、Css(所有的Css文件)、Js(所有的Js文件)、Img(所有的Img文件)
			
			
		4.针对静态文件资源的访问也需要开设相应的接口Bootstrap
			我们在使用Bootstrap渲染页面的时候发现也无效 Bootstrap也需要开设接口就可以使用了
			'''接口前缀 STATIC_URL = '/static/' '''	# 如果前缀不一样 则也无效
			在项目的Settings中顶下方找到	 STATIC_URL = '/static/'
			新建静态文件配置	STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ]
			
		5.动态解析
			为了防止前缀一直切换 设置一个专门监听前缀的方法 设置之后会有一个动态解析后端设置前端自动解析设置相同
			1.	{% load static %}		
				<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.min.css' %}">
				
			2.	{#    {% load staticfiles %}#}		# 方式二功能强大 不用配置前缀可以直接使用
				{#    <link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">#}

在这里插入图片描述

二、请求方法

		URL: 统一资源定位符(网址)
		1.GET请求(朝指定的网址发送请求所要数据)
			get请求也可以携带额外的数据比如刚刚的登录页面提交网址发送了变化(http://127.0.0.1:8000/login/?username=Like&username=123)
			上述携带数据的方式有两个限制
				1> 数据只能是一些无关紧要的非敏感数据(上面例子肯定是不行的)
				2> 数据大小是有限制的 2KB~4KB左右(GET请求没有请求体HTTP数据格式)
				
		2.POST请求(朝要数据的人提交数据)
			也可以携带额外的数据 数据都是放在请求体中 并且数据大小没有限制

		3. form表单默认的数据方式是Get
			method = 'post'	action 控制数据的提交地址
				1>.不写 朝当前页面所在的地址提交
				2>.写后缀 /index/  自动补全ip和port
				3>.写全称 https://www.baidu.com/
		
		4.提交post请求前期需要去配置文件中注视一行代码
			MIDDLEWARE = [# 'django.middleware.csrf.CsrfViewMiddleware',]
			
		'''注意网址 ?后面的数据是不参与匹配的'''

在这里插入图片描述

三、Request对象方法

Request函数会通过不同的请求方式触发 并且需要执行不同的业务逻辑代码

语法说明
request.method获取请求方式 结果是纯大写的字符串
request.POST获取POST请求发送来的普通数据(不包含文件)
request.POST.get()默认只获取列表中最后一个数据值
request.POST.getlist()获取键对应的整个列表 无论有几个数据值
request.GET获取url后面携带的非敏感数据
request.GET.get()默认只获取列表中最后一个数据值
request.GET.getlist()获取键对应的整个列表 无论有几个数据值

在这里插入图片描述

四、Pycharm连接MySQL

		到此我们已经可以拿到数据了 现在就需要用到MySQL数据库了 Pycharm怎样使用mysql呢?
		1.查找pycharm提供的database按钮(左下角或右侧边栏或下载插件或卸载重装)
		2.首次链接数据库需要下载对应的驱动
		3.简单的增删改查
		4.有时间的情况下自行研究更多操作

在这里插入图片描述

五、Django链接MySQL

		Django默认使用的是自带的小数据库sqlite3 但是这款数据库一般只用于本地测试 功能较少
		
		1.修改Settings配置文件中修改配置把原本的sqlite3修改成mysql
				DATABASES = {
				    'default': {
				        'ENGINE': 'django.db.backends.mysql',  # 指定数据库软件名称
				        'NAME': 'day55',  		# 指定库名
				        'USER': 'root',			# 指定用户
				        'PASSWORD': '123',		# 密码
				        'HOST': '127.0.0.1',	# 网址
				        'PORT': 3306,			# 端口
				        'CHARSET': 'utf8'		# 字符编码
				    }
				    
		2.链接可能会出现问题 需要指定链接MySQL模块
			MAC	Django2.2.2 版本需要在项目或者应用目录下的__init__.py中编写一行代码
					import pymysql	pymysql.install_as_MySQLdb()
					出现编码问题 点击蓝色链接 把decode改成encode即可
					MAC不需要安装mysqlclient
					
			WIN Django2.2.2版本不需要再项目目或者应用目录下的__init__.py中编写一行代码
					WIN需要安装mysqlclient

六、Django ORM

		什么是ORM?
			对象关系映射(Object Relational Mapping 简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术
			ORM框架是连接数据库的桥梁 只要提供了持久化类与表的映射关系 ORM框架在运行时就能参照映射文件的信息 把对象持久化到数据库中
			
		为什么用ORM?
			当我们实现一个应用程序时不用ORM 我们可能会写特别多数据访问层的代码 从数据库保存、删除、读取对象信息 而这些代码都是重复的
			而使用ORM则会大大减少重复性代码 对象关系映射主要实现程序对象到关系数据库数据的映射
			类映射成表	对象映射成记录	对象点属性映射成字段对应的值
			
		ORM的存在可以让不会MySQL的python程序员 使用python的语法简单快捷的操作MySQL
		
		1.先去应用目录下models.py中编写模型类
			class User(models.Model):								# 类似于定义了表名	
				id = models.AutoField(primary_key=True)				# 类似于新建了记录ID主键
				name = models.CharField(max_length=32)				# 类似于定义了普通varchar字段
				pwd = models.InteerField()							# 类似于定义了

				id int primary key auto_increment
				name varchar(32)
				pwd int
				
				'''注意括号内可以添加多个属性'''
				
		2.数据库迁移与同步命令
			2.1>将models中有关数据库的操作记录下来到migrations文件夹中
				python38 manage.py makemigrations
				
			2.2>将操作命令真正的去操作数据库
				python38 manage.py migrate
				
			当修改了models中与数据库相关的代码 都必须执行以上两个命令 要不然无效
			ps:可以简写 也可以指定应用单独迁移/同步	Tools>Run Manage.py Task
			
		3.表的主键在orm中 可以不写 orm会自动帮你添加一个id的主键
			如果你需要主键的名称不叫id 只能自己创建

在这里插入图片描述

七、Orm语法

		首先数据库已经创建了好了 添加数据进去直接手点击即可 用户逻辑需要到views.py中操作 导入models
		
		1.查
			models.User.objects.filter(name=username, pwd=password)
			如何获取对象 可以使用first()方法 如果没有值会返回None 我们if判断即可
		2.增
			models.User.objects.create(name='Lisam',pwd=123)
		3.改
			models.User.objects.filter(id=1).update(name='Like')
		4.删
			models.User.objects.filter(id=4).delete()

在这里插入图片描述

八、Orm外键关联

		关联类型主要分为三类 跟MySQL类型一样
			一对多
				外键字段建在多的一方
			多对多
				外键字段建在第三张关系表
			一对一
				外键字段建在查询频率较高的表中
		
		ORM
			一对多
		    	外键字段建在多的一方
		    publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)
		   	
		 	多对多
		    	外键字段可以直接写在某张表中 orm会自动帮你创建第三张表
		    authors = models.ManyToManyField(to='Authors')
		   	一对一
		    	外键字段建在查询频率较高的表中
		    detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)
		class Book(models.Model):
	    title = models.CharField(max_length=32)
	    # 书与出版社是一对多 书是多
	    publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)	
	    	''' 级联删除 注意主键不需要自己去添加ID ORM会自动添加 '''
	    # 书与作者是多对多
	    authors = models.ManyToManyField(to='Authors')
	
		class Publish(models.Model):
		    pub_name = models.CharField(max_length=32)
		
		class Authors(models.Model):
		    name = models.CharField(max_length=32)
		    detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)
		
		class AuthorDetail(models.Model):
		    phone = models.BigIntegerField()

技术小白记录学习过程,有错误或不解的地方请指出,如果这篇文章对你有所帮助请点点赞收藏+关注谢谢支持 !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LoisMay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值