使用django构建rest风格的应用

举报
码乐 发表于 2024/03/27 09:05:34 2024/03/27
【摘要】 简介好了,我们了解了足够多的理论知识,现在我们开始使用django创建应用。 1, linux 环境及项目创建安装python3,django执行安装:apt install python3 && pip install django ~=3.1.0mkdir code && cd codemkdir library && library初始化项目django-admin startpro...

简介

好了,我们了解了足够多的理论知识,现在我们开始使用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可以更方便有效构建符合风格的应用接口。

以方便使用者专注以实现业务。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。