Django知识点

Django知识点整理

HTTP常见的请求方式

  • GET方法 用于使用给定的URI从给定服务器中检索信息,即从指定资源中请求数据。使用GET方法的请求应该只是检索数据,检索的数据在url上可见,并且不对数据产生其他影响。get请求是可以缓存的,且请求的长度有限制。
    • 注:因GET请求的不安全性,在处理敏感数据时,绝不可以使用GET请求。
  • POST方法 该方法用于将数据发送到服务器以创建或更新资源,POST请求永远不会被缓存,且对数据长度没有限制;我们无法从浏览器历史记录中查找到POST请求。
  • HEAD方法 Head方法与GET方法相同,但没有响应体,仅传输状态行和标题部分。这对于恢复相应头部编写的元数据非常有用,而无需传输整个内容。
    • 响应体:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L69DZ8wb-1585544940864)(/home/centos/Pictures/2020-03-30 10-21-10 的屏幕截图.png)]
  • PUT方法 用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。它会将包含的元素放在所提供的URI下,如果URI指示的是当前资源,则会被改变。如果URI未指示当前资源,则服务器可以使用该URI创建资源。
  • DELETE方法 DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。
  • OPTIONS方法 OPTIONS方法用来描述了目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略。
  • TRACE方法 用于沿着目标资源的路径执行消息环回测试;它回应收到的请求,以便客户可以看到中间服务器进行了哪些(假设任何)进度或增量。

HTTP和HTTPS的区别

​ 超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

​ 为了解决安全性的问题,引入了HTTPS协议,又称为安全套接字层超文本传输协议,本质就是HTTP的安全版,在HTTP加入了SSL协议。

SSL协议作用:

  • SSL依靠证书来验证服务器的身份
  • 为浏览器和服务器之间的通信加密

HTTP和HTTPS的主要区别:

  • HTTPS协议需要CA认证证书,一般免费证书有限,需要花费
  • HTTP超文本传输协议,信息是明文传输,安全性较差;HTTPS在HTTP基础上加入的SSL协议,对信息进行加密传输
  • HTTP和HTTPS开放的端口不一致。HTTP为80,HTTPS为443
  • HTTP和HTTPS采用不同的连接方式
HTTPHTTPS
无连接 、无状态HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议

无连接:

限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

无状态:

协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。


​ 早期HTTP设计为无连接状态,是为了即使释放已访问的资源,供其他的客户端访问。但是随着网页复杂化,囊括了更多的静态资源,每次访问静态资源都要建立一次TCP连接,极大浪费了资源,便开发出Keep-Alive功能,来保持客户端和服务端的连接。但是这个功能的利弊两面的,对于包含静态资源访问的页面,能很好地提高静态资源的访问效率,但是对于访问流量较大的网站,一个用户访问完相应资源后连接持续,资源未得到释放,使得其余用户对该资源的访问受阻。

​ HTTP是无状态的,表示每次请求都是独立的。同样也是利弊两方面:一方面当服务器作出响应时不需要先前传输的信息时,响应是很快速的,但是一旦服务器需要先前传输的信息来判断并作出响应的时候,便需要重新传递先前的信息给服务器,造成资源浪费。

​ 为了解决HTTP无状态问题,出现了两种连接技术:

​ 1)客户端的Cookie : 保持登录信息到用户下次与服务器的会话

​ 2)服务端的Session : 当客户端访问服务器时,服务器根据需求设置 Session,将会话信息保存在服务 器上,同时将标示 Session 的 SessionId 传递给客户端浏览器,以后浏览器每次请求都会额外加上这个 参数值,服务器会根据这个 SessionId,就能取得客户端的数据信息。
在这里插入图片描述

HTTP请求响应状态码

1xx 消息,一般是告诉客户端,请求已经收到了,正在处理,别急...
2xx 处理成功,一般表示:请求收悉、我明白你要的、请求已受理、已经处理完成等信息.
3xx 重定向到其它地方。它让客户端再发起一个请求以完成整个处理。
4xx 处理发生错误,责任在客户端,如客户端的请求一个不存在的资源,客户端未被授权,禁止访问等。
5xx 处理发生错误,责任在服务端,如服务端抛出异常,路由出错,HTTP版本不支持等。
  • 200 OK
  • 303 重定向
  • 404 客户端错误
  • 500 服务器端错误

Django请求生命周期

  • Django采用的是MTV模式

  • 主流WEB架构的两种模式

    • MVC模式 Model、View、Controller
      在这里插入图片描述

    • MTV模式 Model、Template、View

      Model : 业务对象与数据库中间的连接,通过ORM对象关系映射操作

      Template : 将页面展示给用户,其中的页面内容数据信息由视图函数处理逻辑后传送给前端页面

      View : 负责业务逻辑的处理,在适当时候调用Model和Template

      note : MTV中其实还需要一个URL控制器,将不同url请求分发给不同的视图处理
      在这里插入图片描述

FBV和CBV

  • FBV(function base views) 就是在视图里使用函数处理请求
#在views.py中编写相应的视图函数
def index(request):
    return HttpResponse('index')
#在urls.py中编写相应的路由
urlpatterns = [
    # ........
    # url(r'', views.index, name='index')
]
  • CBV(class base views) 就是在视图里使用类处理请求
# 在views.py中编写相应的视图类
class categoryList(mixins.ListModelMixin,
					mixins.RetrieveModelMixin,viewsets.GenericViewSet):
    queryset = GoodsCategory.objects.filter(category_type=1)
    serializer_class = CategorySerializer
# 添加相应的路由
router.register('categories', categoryList, basename='categories')
CBV优势
  • 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)
  • 可以用不同的函数针对不同的HTTP方法处理,而不是通过很多if判断,提高代码可读性
# CBV相对与FBV处理HTTP不同的请求更加从容

# FBV方式
def my_view(request):
    if request.method == 'GET':
    return HttpResponse('OK')

# CBV方式
class MyView(View):
    def get(self, request):
    return HttpResponse('OK')

# MyView继承了Django的View,可以支持多种请求方式,只要在类中重写允许的method即可
'''
class-based
view提供了一个 as_view() 静态方法(也就是类方法),调用这个方法,会创建一个类的实例,然后
通过实例调用 dispatch() 方法, dispatch() 方法会根据request的method的不同调用相应的方法来
处理request(如 get() , post() 等)。如果方法没有定义,会抛出HttpResponseNotAllowed异常。
'''
urlpatterns = [
	url(r'^index/$', MyView.as_view()),
]

migrate和makemigrations差别

当创建或修改models.py后,需要进行数据库迁移

$ python manage.py makemigrations 

# 执行该命令会在app中生成一个初始化文件夹migrations,里面存储着迁移脚本
# 但是只是生成了迁移文件,并未执行并更新到数据库
# 迁移文件的实质用ORM来操作数据库,生成sql语句
'''
	# ......
	migrations.CreateModel(
            name='GoodsCategory',
            # ......
            options={
                'verbose_name': '商品类别',
                'verbose_name_plural': '商品类别',
            },
        ),
	# ......
'''
$ python manage.py migrate

# 真正地执行迁移文件,将sql语句作用于数据库中去,如创建表、更新表等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值