django rest framework源码和实战

 内容回顾:

 1、开发模式

       ——普通开发方式(前后端放在一起写)。html和后端都是自己写;前端:HTML、CSS、JS 请求进来之后,后台接收请求,通过render返回数据 ,HTML拿到特殊的标签渲染后返回,前后端通过url交互.用集成在一起的方式进行开发,

        ——前后端分离(前后端的交互 全部用Ajax进行交互 ,不再通过form表单发送请求)

         提交需求、提交数据让用户登录                         Ajax请求

用户  ———————————>      前端(vue)——————————>后端Django restframe框架

        <———————————                     <—————————— 

                   返回页面                                               返回JSON数据

前后端分离的好处:分工明细,代码逻辑更简单,前端可以弄PC(VUE)和APP等后端的数据源代码只需要准备一套,开发效率高。

 2、后端开发的工作,即接口开发:

               给前端提供URL(高级叫法:ApI/接口的开发),前端根据给的url进行访问取数据,后端给它返回HttpResponse,即返回内容:所有的用户列表。

 

 

 代码如下:

在url.py中:

 from  django.contrib  import  admin  from  django.urls  import  path  from  app01  import  views

urlpatterns
= [ # path('admin/', admin.site.urls), path (r ' ^users/ ' , views.users),
]

在views.py中

 import  json  from  django.shortcuts  import  HttpResponse  #  Create your views here. 

 def  users(request):
user_list
= [ ' alex ' , ' oldboy ' ] return HttpResponse(json.dumps((user_list))) # 将字典转换为字符串,将一个Python数据类型转换为json数据类型

 注1:写Django程序永远返回HttpResponse,而不再用render

注2:创建新的pycharm项目

 3、Django、FBV、CBV

           FBV:function base view(基于函数的视图)

   例子如下:函数作为视图函数        

 def  users(request):

user_list
= [ ' alex ' , ' oldboy ' ] return HttpResponse(json.dumps((user_list)))

          CBV:class base view(基于类的视图)

 

 

 代码如下:

在urls.py中:路由:

  path (r '  ^students/  ' , views.StudentsView.as_view()),

在users.py中:视图:

 from  django.views  import  View  #  继承django中继承view 

 class  StudentsView(View):  def  get(self, request, *args, ** kwargs):  return  HttpResponse( '  GET  ' )               #  相当于if request.method == "GET": 
                                                 #  return render(request, 'login.html') 


     def  post(self, request, *args, ** kwargs):  return  HttpResponse( '  POST  '  )  def  put(self, request, *args, ** kwargs):  return  HttpResponse( '  PUT  '  )  def  delete(self, request, *args, ** kwargs):  return  HttpResponse( '  DELETE  '  )  #  在类中写方法,以不同的方法在执行不同的函数 

注:通过Postman进行模拟前端请求的调试。

 

 

 

 

 403forbidden 跨域问题

 

 

 

4、列表生成时:

 class  Foo:  pass 

 class  Bar:  pass 

 #  获取对象列表 
v = []  for  i  in  [Foo, Bar]:
obj
= i()
v.append(obj)
# 相当于下面的一行代码 v = [item() for item in [Foo, Bar]] # 类创造对象——实例化 # 所以v是对象列表

 

5、面向对象(包括继承、封装和多态)

       —封装

                       —类可以对同一类方法的封装

包括:

1、class File:      #即将同一类的方法封装到一个类里面

          文件增删改查方法

2、class DB:

          对数据库的增删改查方法

 class  File:  def  get:  def  delete:  def  updata:  def  add:

 

        —将数据封装到对象中

 class  File:  def   __init__ (self, a1, a2):   #  对象obj里封装了一个a1等于123,xxx等于666 
        self.a1 = a1
self.xxx
= a2 def get(self): return ( " feimin " ) def delete(self): pass def update(self): pass def add(self): pass obj1 = File(123, 666) # 实例化的对象 obj2 = File(456, 999 ) print (obj1.a1) print (obj1.get())

PS:扩展:

整个流程如下:self表示自己

 最后print(req.user)的结果为True.

若修改

 

 则结果为alex.

 

 总结:封装示例的代码如下:

 class  Request(object):  def   __init__  (self, obj):
self.obj
= obj

@property
def user(self): return self.obj.authticate() class Auth(object): def __init__ (self, name, age):
self.name
= name
self.age
= age def authticate(self): return True class APIView(object): def dispatch(self):
self.f2()
def f2(self):
a
= Auth( ' alex ' , 18) # 实例化Auth对象. req = Request(a) # 实例化Request对象 # print(req.obj) print (req.user)


obj
= APIView()
obj.dispatch()

 

今日概要:

     1、restful规范 (建议)

     2、django rest framework框架 (django里面有session、cookie、orm、form等等组件,这相当于又开发了第三方的组件让django应用上来 )

     

 

标签: python

添加新评论