内容回顾:
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应用上来 )
一、引擎主循环UE版本:4.27一、引擎主循环的位置:Launch.cpp:GuardedMain函数二、、GuardedMain函数执行逻辑:1、EnginePreInit:加载大多数模块int32ErrorLevel=EnginePreInit(CmdLine);PreInit模块加载顺序:模块加载过程:(1)注册模块中定义的UObject,同时为每个类构造一个类默认对象(CDO,记录类的默认状态,作为模板用于子类实例创建)(2)调用模块的StartUpModule方法2、FEngineLoop::Init()1、检查Engine的配置文件找出使用了哪一个GameEngine类(UGame
这个问题有两个部分。在RubyProgrammingLanguage一书中,有一个使用模块扩展字符串对象和类的示例(第8.1.1节)。第一个问题。为什么如果您使用新方法扩展类,然后创建该类的对象/实例,则无法访问该方法?irb(main):001:0>moduleGreeter;defciao;"Ciao!";end;end=>nilirb(main):002:0>String.extend(Greeter)=>Stringirb(main):003:0>String.ciao=>"Ciao!"irb(main):004:0>x="foobar"=>"foobar"irb(main):
1.回顾.TransportServicepublicclassTransportServiceextendsAbstractLifecycleComponentTransportService:方法:1publicfinalTextendsTransportResponse>voidsendRequest(finalTransport.Connectionconnection,finalStringaction,finalTransportRequestrequest,finalTransportRequestOptionsoptions,TransportResponseHandlerT>
参考文章搭建文章gitte源码在线体验可以注册两个号来测试演示图:一.整体介绍 介绍SignalR一种通讯模型Hub(中心模型,或者叫集线器模型),调用这个模型写好的方法,去发送消息。 内容有: ①:Hub模型的方法介绍 ②:服务器端代码介绍 ③:前端vue3安装并调用后端方法 ④:聊天室样例整体流程:1、进入网站->调用连接SignalR的方法2、与好友发送消息->调用SignalR的自定义方法 前端通过,signalR内置方法.invoke() 去请求接口3、监听接受方法(渲染消息)通过new signalR.HubConnectionBuilder().on
快速导航(持续更新中…)Cesium源码解析一(terrain文件的加载、解析与渲染全过程梳理)Cesium源码解析二(metadataAvailability的含义)Cesium源码解析三(metadata元数据拓展中行列号的分块规则解析)Cesium源码解析四(Quantized-Mesh(.terrain)格式文件在CesiumJS和UE中加载情况的对比)目录1.前言2.本篇的由来3.terrain文件的加载3.1更新环境3.2更新和执行渲染命令3.3数据优化3.4结束当前帧4.总结1.前言 目前市场上三维比较火的实现方案主要有两种,b/s的方案主要是Cesium,c/s的方案主要是u
Iparking停车收费管理系统-可商用介绍Iparking是一款基于springBoot的停车收费管理系统,支持封闭车场和路边车场,支持微信支付宝多种支付渠道,支持多种硬件,涵盖了停车场管理系统的所有基础功能。技术栈Springboot,MybatisPlus,Beetl,Mysql,Redis,RabbitMQ,UniApp功能云端功能序号模块功能描述1系统管理菜单管理配置系统菜单2系统管理组织管理管理组织机构3系统管理角色管理配置系统角色,包含数据权限和功能权限配置4系统管理用户管理管理后台用户5系统管理租户管理多租户管理6系统管理公众号配置租户公众号配置7系统管理操作日志审计日志8系统
大家好,我叫胡飞虎,花名虎仔,目前负责云效旗下产品Codeup代码托管的设计与开发。代码作为企业最核心的数据资产,除了被构建、部署之外还有更大的价值。为了帮助企业和团队挖掘更多源代码价值以赋能日常代码研发、运维等工作,云效代码团队在大数据和智能化方向进行了一系列的探索和实践(例如代码搜索与推荐),本文主要介绍我们如何通过直接打通源代码来提高研发与运维效率。随着微服务架构的流行,一个业务流程需要多个微服务共同完成。一旦出现问题,运维人员在面对数量多、调用链路复杂的情况下,很难快速锁定导致问题发生的罪魁祸首:代码。为了提高排查效率,目前常见的解决方案是:链路跟踪+日志分析工具相结合。即通过链路跟踪
运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid
信息数智化招采系统服务框架:SpringCloud、SpringBoot2、Mybatis、OAuth2、Security前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、Stream、ElasticSearch等企业电子化采购系统企业电子化采购系统是明理公司在多家大、中、小型企业采购需求的分析与实际应用的基础上,结合企业采购流程优化再造理念开发的一体化电子招标采购平台,对于招标项目提供交易过程的全流程电子化、规范化管
有符号距离场(SDF:SignedDistanceField)是距离场的一种变体,它在3D(2D)空间中将位置映射到其到最近平面(边缘)的距离。距离场在图像处理、物理学和计算机图形学等许多研究中都有应用。在计算机图形的上下文中,距离场通常是有符号的,表示某个位置是否在网格内。在计算机图形学和游戏开发中,SDF显示出极大的通用性,它可以用于碰撞测试、网格表示、光线追踪等。此外,人们发现它在使用光线追踪渲染场景时也有一些好处(即,ray-marching)算法——几乎不需要额外成本就可以产生像软阴影和环境光遮蔽这样的阴影效果。这个项目是关于实时光线行进渲染器的从零开始的C++实现,它包括一个SDF