from beginning to end_mouth04_day03

蓝咒 提交于 2019-12-21 00:06:47

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
      
  • 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
      
  • 利用django连接mysql并在库中创表:

      1. 在settings中设置:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',  #将sqllite3改为mysql
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'USER':'root',
            'PASSWORD':'112233',
            'NAME': 'project02',  # 这里的name就表示要连接的库名,该库必须存在
    
        }
    }
    
      1. 在项目中的__init__文件中:
    from pymysql import install_as_MySQLdb
    
    install_as_MySQLdb()
    
      1. 在应用中的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.迁移:

        1. 在黑窗口中:python manage.py makemigrations
        成功后显示
        Migrations for 'DarryRing01':
            DarryRing01\migrations\0001_initial.py
                -Create model D_mysql
        
        1. 在黑窗口中:python manage.py migrate(成功后显示一堆ok)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!