使用django构建rest风格的应用
简介
好了,我们了解了足够多的理论知识,现在我们开始使用django创建应用。
1, linux 环境及项目创建
安装python3,django
执行安装:
apt install python3 && pip install django ~=3.1.0
mkdir code && cd code
mkdir library && library
初始化项目
django-admin startproject config .
1.1 文件解释
创建初期为空文件,有此文件的 文件夹被视为一个 python包
__init__.py
异步网关服务接口
asgi.py
包含项目的所有配置
settings.py
顶层 页面路由 控制
urls.py
代表Web服务器网关接口 并帮助 Django服务最终的网页
wsgi.py
执行各种Django命令,例如运行本地Web服务器或创建新应用。
manage.py
如果远程开发,需要添加 本地机器ip 或域名到允许列表
ALLOWED_HOSTS = [“127.0.0.1”]
config/setting.py
数据环境创建
python manage.py migrate
在1999端口启动服务
python manage.py runserver 0.0.0.0:1999
创建一个app 应用
python manage.py startapp books
应用文件解释,创建的应用books 包含6个文件
内置的Django 应用程序Admin的配置文件
admin.py
是应用本身的配置文件
apps.py
目录存储迁移文件以进行数据库更改
migrations/
定义数据库模型的地方
models.py
应用测试文件
tests.py
处理Web应用程序的请求/响应逻辑的地方
views.py
2, 将app 构建为整体web应用
2.1,新建app配置
在config/setting 添加新的app到配置项 INSTALLED_APPS configuration
2.2,数据库,视图,连接,模板 数据库创建及管理员
books/models.py
from django.db import models
一切开始的地方,创建应用类
class Book(models.Model):
title = models.CharField(max_length=250)
subtitle = models.CharField(max_length=250)
author = models.CharField(max_length=100)
isbn = models.CharField(max_length=13)
def __str__(self):
return self.title
编辑模型models.py后 执行更新
python manage.py makemigrations books && python manage.py migrate
管理员创建
python manage.py createsuperuser
username: admin
password: admin123
2.3, 配置注册应用程序
应用注册管理
#admin.py
from .models import Book
admin.site.register(Book)
在setting.py中配置注册, 配置注册后需要重启服务
在1999端口启动服务
python manage.py runserver 0.0.0.0:1999
在/admin 管理页面创建一本书,一个项目,通常将其显示为网页,表示 创建4个文件。
控制如何显示 数据库中的数据,如果是列表形式则使用默认的ListView
books/views,
用户访问页面时,将首先与此互动
config/urls,
与config/urls 互动后 将到达这里,使用BookListView
books/urls
在此视图文件中,Book模型与ListView一起使用以列出所有页面模板
books/template
最后一步是创建我们的模板文件,以控制实际网页上的布局。
我们已经在视图中将其名称指定为book_list.html。
它有两个选择位置:默认情况下,Django模板加载器会在位置:
books/templates/books/book_list.html。
我们也可以创建一个单独的改为在项目级别的模板目录中更新我们的config/settings.py文件以指向该目录
代码如下:
cat books/views.py
from django.shortcuts import render
在在此处创建视图
from django.views.generic import ListView
from .models import Book
class BookListView(ListView):
model = Book
template_name = 'book_list.html'
config/urls.py
如果用户访问 路由 /admin/ 则访问这个默认app admin
from django.contrib import admin
include 将使用自定义的app books
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
根路径为 books 路由
path('', include('books.urls')),
]
查看 books/urls.py
from django.urls import path
from .views import BookListView
urlpatterns = [
path('', BookListView.as_view(), name='home'),
]
查看 books/templates/books/book_list.html
<h1>All books</h1>
{% for book in object_list %}
<ul><li>Title: {{ book.title }}</li>
<li>Subtitle: {{ book.subtitle }}</li>
<li>Author: {{ book.author }}</li>
<li>ISBN: {{ book.isbn }}</li>
</ul>
{% endfor %}
重启服务,并访问根路径将列出所有图书 http://127.0.0.1:1999/
错误处理,如果 admin管理界面访问错误
$> ./manage.py shell
>>> from django.contrib.sites.models import Site
>>> site = Site.objects.create(domain='example.com', name='example.com')
>>> site.save()
3, 创建api服务
3.1 安装
安装 库 pip install djangorestframework~=3.11.0
api 返回的数据为json格式, 我们的API将公开一系列端点,该端点在JSON中列出所有书籍。
所以据此需要新的URL路由,新的视图,新的序列化文件 URL view serializer file。
可以通过多种方式来组织这些文件,但是我的首选方法是创建专用的api应用,这样可以保证扩展性。即使我们将来添加更多应用,每个应用仍可以包含专用网页所需的模型,视图,模板和url。
整个项目将保存在专用的api应用程序中的 API专用文件创建 api 应用
python manage.py startapp api
注册应用 如果添加了这一行,就不能再添加 books,相互冲突
INSTALLED_APPS = ['api.apps.ApiConfig',
'books.apps.BooksConfig',
...
'books' # 与之上的'books.apps.BooksConfig'效果一样,同时添加将导致冲突
]
没有数据库改动,就不需要执行 python manage.py makemigrations && python manage.py migrate
3.2 路由
api应用的urls
定义顶层路由 路径 形如: api/
添加路径
config/urls.py
urlpatterns = [path('api/', include('api.urls')), ...# new]
添加路径
api/urls.py
from django.urls import path
from .views import BookAPIView
urlpatterns = [
path('', BookAPIView.as_view()),
]
3.3 视图
api 应用的 Views 将依赖 django-restframwork的 内建视图
内建rest视图故意模仿传统Django基于类的通用视图的格式,但是它们并不一样
为了在调用api视图时,不至于混淆框架视图文件views.py,
视图处理api/views.py
from rest_framework import generics
from books.models import Book
from .serializers import BookSerializer
class BookAPIView(generics.ListAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
3.4 序列化处理
序列化处理,创建serializers.py, touch api/serializers.py
from rest_framework import serializers
from books.models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ('title', 'subtitle', 'author', 'isbn')
3.5 访问测试
指令:curl 127.0.0.1:1999/api/
可以发现有一个此页面中内置的许多功能,比如可视化
通过url 127.0.0.1:1999/api/ 。
4 小结
django3配合django-restframwork可以更方便有效构建符合风格的应用接口。
以方便使用者专注以实现业务。
- 点赞
- 收藏
- 关注作者
评论(0)