django rest framework源码和实战,html和后端都是自


 内容回顾:

 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应用上来 )

     

 

评论关闭