Django记录

uWSGI ,WSGI和uwsgi的区别

WSGI:通讯规范,用于web服务器 与 框架之间的通信规范
uwsgi:同样是通讯协议,他是uWSGI服务器的独占协议,用以定义传输信息类型
uWSGI:web服务器,它实现了WSGI、uwsgi、http协议

django 和 flask 内部均没有实现socket,而是wsgi实现
wsgi是web服务网管接口,它是一个协议,实现它的协议有:wsgiref / werkzeug / uwsgi 
uWSGI ,WSGI和uwsgi的区别

Django的请求生命周期

发起请求完整流程图
浏览器
    发送请求(HTTP协议)
 
web服务网关接口
    1.请求来的时候解析封装
        响应走的时候打包处理
 
    2.django默认的wsgiref模块不能承受高并发 最大只有1000左右
        上线之后会替换成uwsgi来增加并发量
    
    3.uWSGI、WSGI、uwsgi的关系
        WSGI是一个应用服务器(如uWSGI)与应用框架(如Django、Flask)通信的一种规范(协议)
        uwsgi是一个Web服务器(如nginx)与应用服务器(如uWSGI)通信的一种规范(协议)
        uWSGI是web服务器
 
django后端
    1.django中间件(暂时不考虑 后面讲)
        类似于django的保安 门户
        
    2.urls.py         路由层
        识别路由匹配对应的视图函数
    
    3.views.py        视图层
        网站整体的业务逻辑
        
    4.templates文件夹  模版层
        网站所有的html文件
    
    5.models.py        模型层
        ORM
额外扩展:缓存数据库的作用

使用wsgiref手写一个简单的框架(和Werkzeug很相似)

from wsgiref.simple_server import make_server


class MyWsgi(object):

    def __call__(self, environ, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')])
        return [b'Hello, World!']

    def run(self):
        # 内部处理请求时会调用self(),因此会触发__call__方法
        # self()
        httpd = make_server('127.0.0.1', 8000, self)
        httpd.serve_forever()


if __name__ == '__main__':
    my_wsgi = MyWsgi()
    my_wsgi.run()

Django常用中间件

MIDDLEWARE_CLASSES = [
    # 缓存中间件
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
    # 会话中间件
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    # 通用中间件
    'django.middleware.common.CommonMiddleware',
    # 为request/response提供了几种安全改进
    'django.middleware.security.SecurityMiddleware',
    # CSRF保护中间件
    'django.middleware.csrf.CsrfViewMiddleware',
    # 用户授权中间件
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 消息中间件
    'django.contrib.messages.middleware.MessageMiddleware',
    # 点击劫持防御中间件
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 本地化中间件
    'django.middleware.locale.LocaleMiddleware',
]

Django REST framework主要用途

1. 序列化和反序列化
2. 封装视图、路由
3. 认证
4. 权限
5. 限流

RESTful 接口规范

restful:翻译成中文【资源状态转换】,约定面向资源开发,接口中不再使用动词去形容接口的行为,而是直接通过请求方式的不同来指定其行为。

POST    新增资源
DELETE  删除资源
PUT     修改资源
GET     查询所有资源
GET<pk> 查询单个资源

Django CBV类View的主要方法、属性及作用

源码核心逻辑

# 用户请求进来,比如GET、POST请求:/book/
get请求/book/ => view() => return self.dispatch() => return get()
post请求/book/ => view() => return self.dispatch() => return post()


class View():

    @classmethod
    def as_view(cls):
        """【注意】只允许被类调用,返回一个view函数"""

        def view():
            """调用子类的dispatch方法,并返回"""
             # 子类BookView()实例
            self = cls()
            return self.dispatch(request,*args,**kwargs)

        return view

    def dispatch(self,request,*args,**kwargs):
        """核心逻辑【分发路由】,通过反射getattr获取子类对应的视图函数,并调用及返回"""

        # self获取'get'、'post'等属性,将得到一个视图函数
        handler = getattr(self,request.method.lower())

        # 真正去执行用户编写的视图函数逻辑
        return handler(request,*args,**kwargs)

Django-rest-framework 类 APIView的主要方法、属性及作用

源码核心逻辑

class APIView(View):
    """继承于CBV的View"""

    def as_view(cls):
        """调用父类的as_view方法"""
        view = super().as_view()
        return view

    def dispatch(self,request,*args,**kwargs):
        """重写路由分发规则"""

        # 构建新request
        self.request = self.initialize(request,*args,**kwargs)
        # 初始化:认证、权限、限流
        self.initial(request,*args,**kwargs)
        # 分发逻辑(和CBV的View类分发逻辑一致)
        handler = getattr(self,request.method.lower())

        # 调用视图函数,并返回
        return handler(request,*args,**kwargs)

APIView请求生命周期

APIView类请求生命周期

Django-rest-framework 类 GenericAPIView的主要方法、属性及应用

源码核心逻辑

class TestSerializers(serializers.ModelSerializer):
    # test_id是自定义的显示字段,source的是模型类里面对应的字段
    test_id = serializers.IntegerField(source='id')

    class Meta:
        # 模型类
        model = RoomAppointment
        # 返回所有字段,和 exclude 属性互斥
        # fields = '__all__'
        # 返回字段
        fields = ['id','name']
        # 排除字段
        exclude = ['id']

class GenericAPIView(APIView):
    """继承于drf的APIView"""

    # queryset 属性名字不能改变,且必须定义
    queryset = Test.objects.all()
    # serializer_class 属性不能改变,且必须定义
    serializer_class = TestSerializers

    def get_queryset(self):
        """获取queryset"""
        pass

    def get_object(self):
        """获取obj对象,【注意】需要在调函函数传递 pk 字段,此字段必传且名字规定,如果要更改字段名称,要继承重写配置"""
        pass

    def get_serializer(self,*args,**kwargs):
        """获取serializer对象,即是定义的serializer_class的实例对象"""
        pass

    def get_serializer_class(self):
        """获取serializer类"""
        pass
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,802评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,109评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,683评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,458评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,452评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,505评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,901评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,550评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,763评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,556评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,629评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,330评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,898评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,897评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,140评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,807评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,339评论 2 342

推荐阅读更多精彩内容