内容回顾:
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应用上来 )
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django rest framework源码和实战 - Python技术站