Django基础01-基于restframework基础web搭建

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.pyINSTALLED_APPS模块配置中添加restfremawork模块。

INSTALLED_APPS已安装程序配置,如果在项目中添加了相关模块APP,使用的话需要在INSTALLED_APPS配置项中添加对应APP配置,然后migratemigrations两个命令才会对相应APP生效。

INSTALLED_APPS = [
    ...
    'rest_framework',
]

修改tutorial文件夹中setting.py,添加REST_FRAMEWORK分页设置

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

完善代码

对象序列化

数据源序列化用到了rest_frameworkserializers模块,实现对象的序列化与反序列化。
在上面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的两个模块viewsetspermissions
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层对外暴露接口的具体路径。

**注:**正常会在创建quickstartAPP中的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进行测试。

结语

上述的过程和内容还有很多细节需要整理的地方,由于是基础的搭建和使用了解就没有做过多的扩展,在后面其他的文章会逐一对各个模块和配置做对应的详细介绍,不断的完善项目形成一个完整的系统。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我在那路边

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值