1. 2020-10-10
- django大致是类似于java中spring那一套,但是更简单,基本上不需要配置相关文件就可以直接上手
- 通过pip下载django
pip install django
- 项目开始,建立工作文件夹workproject
cd workproject的位置
django-admin startproject projectname
projectname下面的url和setting是常有的东西,前者主要是配置路由,就是前端发过来的请求交给app里面view中的哪个函数去处理。当然这里是总的路由,在app里面新建子路由
- 创建app,现切换到项目下
cd /projectname
python3 manager.py startapp appname
注意app大概就是一个处理对象,比如app里面的view.py就是具体处理响应函数所在的包
- 服务器的运行,切换在projectname下
python manager.py runserver 0.0.0.0:80
可能会报错
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
只需下载
python manage.py migrate
注意,要在浏览器中访问可以去跟项目名相同的文件下面找到setting.py,然后设置
ALLOWED_HOSTS = []#添加你需要的地址,例如:localhost,127.0.0.1等等
在浏览器中输入localhost即可访问成功(有点tomcat那个味儿)
- 和数据库的连接,可以使用内置的sqlite3,在运行了上述命令之后,文件夹后面会相关sql文件夹
- 因为语言关系的高封装性,我们不需要写任何语句,当想要创建某个表的时候,我们只需要将该类继承models里面的Model类,继承后使用类似如下方式进行相关字段的创建
#姓名
name = models.CharField(max_length=200)
#电话号码
phonenumber = models.CharField(max_length=200)
#地址
address = models.CharField(max_length=200)
然后需要运行以下以下两段语句进行提交,提交后可以在sql管理工具里面看到相关的表的生成
#生成同步数据库的脚本:
python manage.py makemigrations
#同步数据库:
python manage.py migrate
2. 2020-10-11
- 注意上次提交的表单是customer表,也就是说数据库里面生成了一张customer,但其实其内置了很多张表,比如usr表等等,要注意区分!
- 首先是数据的列出、添加、修改、删除。因为其框架的安全性质(CRSF),我们先将setting.py里面涉及内容先注释,待测试完毕再开启
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- 同时,因为防止view.py里面太过于复杂,再建立一个customer.py文件专注于处理customer的相关操作,具体项目的urls.py和app(mgr)的urls.py怎么写,需要根据具体api规范来操作,以我为例,管理员操作用户发过来的请求为api/mgr/customers,所以在总的urls.py里面新加path
path('api/mgr/',include("mgr.urls"))
在app(mgr)的urls.py里面添加
path('customers',dispatcher),
当然,我们可以直接在view.py里面写处理该请求的dispatcher函数,但需要注意的是为了更加模块化,不要一昧将所有函数全部写在view.py中,我们可以在mgr下面再新建一个customer.py,该文件专注于处理管理员操作用户请求,即我们的dispatcher。可能会有人问:一个请求怎么做到增删查改的!其实这里就是Restful编程风格,其采用不同的请求方式来实现同一个请求实现不同的功能,所以dispatcher中我们需要来分流,识别他们再分别实现不同功能!
def dispatcher(request):
识别请求方式
根据不同的方式用不同的函数处理不同需要
- 识别请求方式
# GET请求 参数在url中,同过request 对象的 GET属性获取
if request.method == 'GET':
request.params = request.GET
# POST/PUT/DELETE 请求 参数 从 request 对象的 body 属性中获取
elif request.method in ['POST','PUT','DELETE']:
# 根据接口,POST/PUT/DELETE 请求的消息体都是 json格式
request.params = json.loads(request.body)
- 根据不同的action分派给不同的函数进行处理
action = request.params['action']
if action == 'list_customer':
return listcustomers(request)
elif action == 'add_customer':
return addcustomer(request)
elif action == 'modify_customer':
return modifycustomer(request)
elif action == 'del_customer':
return deletecustomer(request)
else:
return JsonResponse({'ret': 1, 'msg': '不支持该类型http请求'})
可能会有人问这个action是什么,其实这就是根据api,即前端会给说清楚前端请求的数据的json格式各字段的意思,比如本次的action就是调用函数的名字,这些都是根据api来具体操作的
- 下面就是核心了,即具体的每一个函数操作内容
- listcustomers()
def listcustomers(request):
# 返回一个 QuerySet 对象 ,包含所有的表记录,高度封装,返回customer表的全部内容
qs = Customer.objects.values()
# 将 QuerySet 对象 转化为 list 类型
# 否则不能 被 转化为 JSON 字符串
retlist = list(qs)
return JsonResponse({'ret': 0, 'retlist': retlist})
这里的Customer其实就是最开始我们生成数据库表的那一个类,JsonResponse()函数就是将一个字典转化为json格式,列出语句核心
- addcustomer()
def addcustomer(request):
info = request.params['data']
# 从请求消息中 获取要添加客户的信息
# 并且插入到数据库中
# 返回值 就是对应插入记录的对象
record = Customer.objects.create(name=info['name'] ,
phonenumber=info['phonenumber'] ,
address=info['address'])
return JsonResponse({'ret': 0, 'id':record.id})
核心就是Customer.objects.create(),传入相关的字段
- deletecustomer()
def deletecustomer(request):
customerid = request.params['id']
try:
# 根据 id 从数据库中找到相应的客户记录
customer = Customer.objects.get(id=customerid)
except Customer.DoesNotExist:
return {
'ret': 1,
'msg': f'id 为`{customerid}`的客户不存在'
}
# delete 方法就将该记录从数据库中删除了
customer.delete()
return JsonResponse({'ret': 0})
核心:Customer.objects.get(),拿到指定id的customer再根据id删除该条记录,最后记得customer.delete()
- modifycustomer()
def modifycustomer(request):
# 从请求消息中 获取修改客户的信息
# 找到该客户,并且进行修改操作
customerid = request.params['id']
newdata = request.params['newdata']
try:
# 根据 id 从数据库中找到相应的客户记录
customer = Customer.objects.get(id=customerid)
except Customer.DoesNotExist:
return {
'ret': 1,
'msg': f'id 为`{customerid}`的客户不存在'
}
if 'name' in newdata:
customer.name = newdata['name']
if 'phonenumber' in newdata:
customer.phonenumber = newdata['phonenumber']
if 'address' in newdata:
customer.address = newdata['address']
# 注意,一定要执行save才能将修改信息保存到数据库
customer.save()
核心:Customer.objects.get(),拿到指定id的customer再根据id修改该条记录,返回的是一个字典,最后记得customer.save()保存!