Django基础01-基于restframework基础web搭建
记录根据django-vue-admin项目的架构,记录django知识点。
初始化Django项目
使用djangorestframework
快速开始一个项目,根据官方文档:https://www.django-rest-framework.org/tutorial/quickstart/ 一步步创建基础web框架。
创建虚拟环境
一般python项目开发都会创建一个虚拟的python环境,在自己的环境中进行开发,这样的好处是可以指定python版本,并且安装的第三方包与系统python环境进行隔离。
# 创建目录
mkdir tutorial
cd tutorial
# 创建虚拟环境(python的虚拟环境,可以指定具体python版本)
python -m venv venv
# 激活虚拟环境(windows)
venv\Scripts\activate
# 激活虚拟环境(Linux)
source venv\bin\activate
扩展:虚拟环境还可通过pipenv
创建,pipenv可以指定自己的虚拟环境路径和相关的配置,优点目前感觉更详细( 具体可参考:https://blog.csdn.net/stormdony/article/details/85019153),但是使用方便程序更倾向上述的方式,随项目目录一起,也很方便管理。
安装Django包
激活虚拟环境后就可以安装Django的相关包,这里需要注意的django
包就是Django的包,有了这个就可以创建项目了,但是djangorestfremawork
是Django的第三方工具包,可以快速的创建api,集成了用户、权限等模块,同时支持ORM或非ORM数据源的序列化。
# 虚拟环境中安装django相关包
pip install django
# django-restfremawork包
pip install djangorestfremawork
创建项目
安装django
包后默安装django-admin
命令,通过django-admin
命令可以快速的创建项目、应用、启动项目,一般只有在创建项目的时候用django-admin
命令,创建好项目后都可以通过python manage.py xxx
来代替。
# 初始化一个Django项目,关键参数startproject
django-admin startproject tutorial
cd tutorial
# 第一种方式创建模块(应用app)
django-admin startapp quickstart
# 第二种方式创建模块(这种方式使创建项目后会生成manage.py文件,通过参数startapp创建模块,也叫应用app)
python manage.py startapp quickstart
到这位置,项目的基础目录结构已经有了,后期可以根据自己的喜好修改目录结构。
│ db.sqlite3
│ manage.py
│
├─quickstart
│ │ admin.py
│ │ apps.py
│ │ models.py
│ │ tests.py
│ │ views.py
│ │ __init__.py
│ │
│ └─migrations
│ __init__.py
│
└─tutorial
│ asgi.py
│ settings.py
│ urls.py
│ wsgi.py
└─ __init__.py
生成基础数据表
配置数据库,并初始化数据表
# 默认使用sqlite数据库,如果有其他数据库需要先修改setting.py文件中数据库配置,并安装相关包
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
# 生成setting中基础模块的表结构
python manage.py migrate
# 创建基础用户,并根据提示设置密码
python manage.py createsuperuser --email admin@example.com --username admin
**注:**正常项目在python manage.py migrate
命令执行前会执行python manage.py makemigrations
生成实体对象对应的修改过程或者初始化,在文件夹migrations
中生成对应的变化过程文件,然后再执行python manage.py migrate
命令根据migrations
文件夹的文件创建、修改数据表。
配置rest_framework模块
修改tutorial
文件夹中setting.py
的INSTALLED_APPS
模块配置中添加restfremawork模块。
INSTALLED_APPS
已安装程序配置,如果在项目中添加了相关模块APP,使用的话需要在INSTALLED_APPS
配置项中添加对应APP配置,然后migrate
和migrations
两个命令才会对相应APP生效。
INSTALLED_APPS = [
...
'rest_framework',
]
修改tutorial
文件夹中setting.py
,添加REST_FRAMEWORK分页设置
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
完善代码
对象序列化
数据源序列化用到了rest_framework
的serializers
模块,实现对象的序列化与反序列化。
在上面django-admin startapp quickstart
命令创建的模块中创建serizalizers.py
序列化文件,并添加以下代码。
serizalizers.py
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
"""
如需添加额外自定义段,可以在Meta之前添加def get_xxx()方法,添加自定义字段。
"""
class Meta:
# 对Django自带的用户进行序列化
model = User
# 序列化展示对外暴露的字段
fields = ['url', 'username', 'email', 'groups']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
接口View层
在view.py
文件中替换如下代码,实现django自带的用户模块接口。
这里调用了rest_framework
的两个模块viewsets
和permissions
。
viewsets
模块简单理解就是重写和继承了Django的api相关类,实现了各种功能。其中ModelViewSet
直接封装对象的所有操作,实现了对象CURD的基本操作。
- 继承自GenericViewSet
- 继承自CreateModelMixin
- 继承自RetrieveModelMixin
- 继承自UpdateModelMixin
- 继承自DestroyModelMixin
- 继承自ListModelMixin
permissions
是权限相关模块。
view.py
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from rest_framework import permissions
from quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
路由配置
修改tutorial
文件夹中urls.py
配置接口路由,也就是view层对外暴露接口的具体路径。
**注:**正常会在创建quickstart
APP中的urls.py文件中配置对应的应用的路由,然后在tutorial
文件夹中urls.py
文件里引用对应的路由即可,这样可以方便管理。由于这个是demo所以直接在tutorial
文件夹中urls.py
文件做配置。
from django.contrib import admin
from django.urls import include, path
from rest_framework import routers
from quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)),
path('admin/', admin.site.urls),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
启动服务
启动服务python manage.py runserver
,访问http://127.0.0.1:8000/
即可看到接口详细信息,并进行测试。
访问8000
根目录即可看到所有路由信息,访问具体的路由就可以对对应的API进行测试。
点击访问http://127.0.0.1:8000/users/
即可对用户API进行测试。
结语
上述的过程和内容还有很多细节需要整理的地方,由于是基础的搭建和使用了解就没有做过多的扩展,在后面其他的文章会逐一对各个模块和配置做对应的详细介绍,不断的完善项目形成一个完整的系统。