day03
-
为什么会出现跨域问题:1、浏览器限制,2、跨域(域名,端口不一样都是跨域),3、XHR(XMLHttpRequest请求)。同时满足三个条件才有可能产生跨域问题。
-
cookies和session的异同
- cookie数据存放在客户的浏览器上,session数据放在服务器上。
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。
- session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE。
- 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。cookie 和session 的联系:session是通过cookie来工作的,可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中
-
CSRF的 攻击原理和防范措施
-
攻击原理:
用户C访问正常网站A时进行登录,浏览器保存A的cookie
用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数
而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookie
所以网站A在接收到请求之后可判断当前用户是登录状态,所以根据用户的权限做具体的操作逻辑,造成网站攻击成功 -
防范措施:
在指定表单或者请求头的里面添加一个随机值做为参数
在响应的cookie里面也设置该随机值
那么用户C在正常提交表单的时候会默认带上表单中的随机值,浏览器会自动带上cookie里面的随机值,那么服务器下次接受到请求之后就可以取出两个值进行校验
而对于网站B来说网站B在提交表单的时候不知道该随机值是什么,所以就形成不了攻击
-
-
ORM的全称是:Object Relational Mapping (对象 关系 映射)简单的说,orm是通过使用描述对象和数据之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
-
ORM的优缺点:
- 优点:
orm的技术特点,提高了开发效率。可以自动对实体Entity对象与数据库中的Table进行字段与属性的映射;不用直接SQL编码,能够像操作对象一样从数据库中获取数据 - 缺点:
orm会牺牲程序的执行效率和会固定思维模式,在从系统结构上来看,采用orm的系统多是多层系统的,系统的层次太多,效率就会降低,orm是一种完全面向对象的做法,所以面向对象的做法也会对性能产生一定的影响。
- 优点:
-
cookie的应用:
- cookie的代码写在views文件中
- 例:
# 设置cookie def set_cookies(request): name = request.GET.get('name') coo = HttpResponse('设置cookies') coo.set_cookie('cooke_name',name) return coo # 获取cookie def get_cookies(request): doing = request.GET.get('doing') name = request.COOKIES.get('cooke_name') return HttpResponse(name+doing) # 1.在postman中先发送一个get请求,设置name --> 接收到:设置cookies # 2.在postman中再发送一个get请求,设置doing --> 接收到:name+doing
- cookie的代码写在views文件中
-
session的应用(需在settings中设置:SESSION_ENGINE=‘django.contrib.sessions.backends.cache’,放到最后即可):
- session代码也写在views中
- 例:
def set_session(request): name = request.GET.get('name') request.session["s_name"] = name return HttpResponse('设置session') def get_session(request): doing = request.GET.get('doing') name = request.session.get('s_name') return HttpResponse(name+doing) # 1.在postman中先发送一个get请求,设置name --> 接收到:设置cookies # 2.在postman中再发送一个get请求,设置doing --> 接收到:name+doing
- session代码也写在views中
-
利用django连接mysql并在库中创表:
-
- 在settings中设置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #将sqllite3改为mysql 'HOST': '127.0.0.1', 'PORT': 3306, 'USER':'root', 'PASSWORD':'112233', 'NAME': 'project02', # 这里的name就表示要连接的库名,该库必须存在 } }
-
- 在项目中的__init__文件中:
from pymysql import install_as_MySQLdb install_as_MySQLdb()
-
- 在应用中的models中建表:
- 例:
from django.db import models # Create your models here. class User(models.Model): name = models.CharField(max_length=32), gender = models.CharField(default='保密'),
-
4.迁移:
-
- 在黑窗口中:python manage.py makemigrations
成功后显示 Migrations for 'DarryRing01': DarryRing01\migrations\0001_initial.py -Create model D_mysql
-
- 在黑窗口中:python manage.py migrate(成功后显示一堆ok)
-
-
来源:CSDN
作者:陈铭丶
链接:https://blog.csdn.net/weixin_45805607/article/details/103637385