打开指定文件夹,在路径位置输入cmd打开命令行
django-admin startproject 项目名 创建项目
python manage.py startapp 子应用名
在settings.py文件内注册子应用
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'创建的子应用名' #注册子应用
]
在settings.py文件内
# 配置数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 使用mysql数据库
'HOST': 'localhost', # 主机
'PORT': 3306, # 端口
'USER': 'root', # 数据库的用户名
'PASSWORD': '密码', # 数据库的密码
'NAME': '创建的数据库名', # 数据库的名字
}
}
在settings.py文件内
LANGUAGE_CODE = 'zh-Hans' #语言
TIME_ZONE = 'Asia/Shanghai' #时区
在settings.py文件内
# 配置静态资源(现在基本上用不到)
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')] #配置路径,在根目录创建文件夹
查看所有数据库: show databases;
创建数据库: create database 数据名 charset=utf8;
删除数据库: drop database 数据库名;
调用数据库: use 数据库名;
查看数据库下的所有表: show tables;
查看表结构: desc 表名;
查看表中的所有数据: select * from 表名;
在跟项目名同名的文件夹内init.py文件里安装
import pymysql
pymysql.install_as_MySQLdb()
在子应用文件夹里的models.py创建
# 模型类 会自动生成 id字段
class People(models.Model):
name=models.CharField(max_length=20,verbose_name='姓名')
sex=models.CharField(max_length=20,verbose_name='性别')
money=models.IntegerField(verbose_name='身价')
ranking=models.IntegerField(verbose_name='排名')
class Meta:
verbose_name='名人表'
verbose_name_plural=verbose_name
db_table='people'
def __str__(self):
return self.name
在项目内终端执行
生成迁移文件:python manage.py makemigrations
执行迁移:python manage.py migrate
如果迁移出错,把数据库删了创建新的数据库,生成的迁移文件也删了,重新执行上面2个步骤
创建超级用户 (python终端内运行)
python manage.py createsuperuser
电子邮件地址直接回车跳过
(前后密码要一致)
如果出现cryptography报错就python终端内安装
pip install cryptography
2.在子应用的admin.py文件中添加代码,注册表,不然admin控制台没办法管理这个表
from django.contrib import admin
#导包
from myapp.models import People #models.py文件内创建的模型类名
# Register your models here.
admin.site.register(People)
3.运行项目,在admin页面添加数据
前端主要追求的是美观、流畅、兼容
后端追求的是三高,高性能、高并发、高可用
增删改查
GET:获取数据
POST:提交数据,创建数据
PUT:提交数据,更新数据
DELETE:删除数据
状态码
200 [GET] 获取数据时的状态码
201 [POST/PUT/PATCH] 添加或创建数据
204 [DELETE] 用于删除的状态码
在黑窗口内进行安装
pip install djangorestframework
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
'rest_framework'
]
APIView处理Request
from rest_framework.views import APIView
from rest_framework.response import Response
from myapp.models import People
class MyView(APIView):
def get(self, request):
print(request.query_params)
return Response({'msg': 'success'}, status=200)
def post(self, request):
print(request.data)
return Response({'msg': 'success'}, status=201)
class PeopleView(APIView):
# 手动获取
def get(self, request):
people = People.objects.all()
people_list = []
for i in people:
people_data = {
'name':i.name,
'sex': i.sex,
'money': i.money,
'ranking':i.ranking
}
people_list.append(people_data)
return Response(people_list, status=200)
配置路由
# from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
# path('admin/', admin.site.urls),
path('myview/',views.Myview.as_view())
path('mymodel/',views.PeopleView.as_view())
]
在子应用中创建一个serializers.py文件写入类方法
#导包
from rest_framework import serializers
from myapp.models import People
#普通序列化器
class PeopleSerializer(serializers.Serializer):
name=serializers.CharField(max_length=20)
sex=serializers.CharField(max_length=20)
money=serializers.IntegerField()
ranking=serializers.IntegerField()
#新增数据会调用create方法
def create(self,vaLidated_data):
obj=People.objects.create(
**vaLidated_data
)
return obj
#修改数据需要update方法
# instance=peo_data,要修改的ORM对象(实例)
# data=request.data,用于修改ORM对象的数据
def update(self, instance, validated_data):
instance.name=validated_data.get('name')
instance.sex=validated_data.get('sex')
instance.money=validated_data.get('money')
instance.ranking=validated_data.get('ranking')
instance.save()
#返回修改后的ORM对象
return instance
#模型序列化器
class PeopleSerializer2(serializers.ModelSerializer):
class Meta:
#指定模型类
model=People
#指定映射字段
fields='__all__'
在视图层实现
#导包
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from myapp.models import People
from myapp.serializers import PeopleSerializer,PeopleSerializer2
# Create your views here.
class Myview(APIView):
def get(self,request):
print(request.query_params)
return Response({'masg':'success'},status=200)
def post(self,request):
print(request.data)
return Response({'msg':'success'},status=201)
class Peppleview(APIView):
#获取全部人物信息
def get(self,request):
people=People.objects.all()
#people是要序列化的数据,many=True多个数据
#使用序列化器,对数据进行序列化
ser=PeopleSerializer2(people,many=True)
return Response(ser.data,status=200)
#增加一个人物信息 反序列化 jsons数据->ORM格式数据
def post(self,request):
#使用序列化器进行反序列化
ser=PeopleSerializer2(data=request.data)
#判断但序列化是否成功
#raise_exception=True如果出现异常,会抛出异常
if ser.is_valid(raise_exception=True):
#保存
ser.save()
return Response({'mag':'success'},status=201)
return Response({'mag':'error'},status=200)
class Peopleview2(APIView):
#查询一个人物信息
def get(self,request,id):
try:
peo_data = People.objects.get(id=id)
except Exception as a:
print(a)
#404数据不存在
return Response({'msg':'error'},status=404)
#对ORM操作查询到的数据进行序列化
ser=PeopleSerializer2(peo_data)
return Response(ser.data,status=200)
#修改一个人物信息
def put(self,request,id):
try:
peo_data = People.objects.get(id=id)
except Exception as a:
print(a)
# 404数据不存在
return Response({'msg': 'error'}, status=404)
#对更新的数据进行 反序列化
#instance=peo_data,要修改的ORM对象(实例)
#data=request.data,用于修改ORM对象的数据
ser=PeopleSerializer2(instance=peo_data,data=request.data)
#判断反序列化是否成功
if ser.is_valid(raise_exception=True):
#保存
ser.save()
#201添加/修改成功
return Response({'msg':'success'},status=201)
return Response({'msg':'error'},status=500)
#删除一个人物信息
def delete(self,request,id):
try:
People.objects.filter(id=id).delete()
except Exception as e:
print(e)
#404数据不存在
return Response({'msg':'error'},status=404)
#204删除成功
return Response({'msg':'success'},status=204)
配置路由
# from django.contrib import admin
from django.urls import path
from myapp import views
urlpatterns = [
# path('admin/', admin.site.urls),
path('myview/',views.Myview.as_view())
#注:跟上一个手动获取视图类同名了
path('mymodel/',views.PeopleView.as_view())
path('mymodel//' ,views.Peopleview2.as_view())
]