完整的Django+vuejs构建音乐网站项目
对于这个项目,我正在使用Python 3.6.9和Django版本3.0.8。
让我们创建一个虚拟环境。
python3 -m venv env
安装django和drf
pip install Django==3.0.8
pip install djangorestframework
创建项目:
django-admin startproject api
我们将为音乐文件和身份验证使用不同的app。这有助于我们更快地开发项目,也有助于实现新功能,而不会影响其余功能。
django-admin startapp music && django-admin startapp users
现在将它们添加到api / settings.py文件中的已安装的应用程序中
rest_framework,
rest_framework.authtoken,
music,
让我们通过版本控制将音乐应用程序URL添加到api。
from django.contrib import admin
from django.urls import path , include , re_path
urlpatterns = [
path('admin/', admin.site.urls),
re_path('api/(?P<version>(v1|v2))/', include('music.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #tgis helps in accessing media with native elements
音乐API:
导航到音乐应用程序并添加音乐模型。
from django.db import models
from django.conf import settings
# Create your models here.
class Songs(models.Model):
id = models.AutoField(primary_key=True)
title = models.CharField(max_length=255, null=False)
artist = models.CharField(max_length=255, null=False)
song = models.FileField(upload_to='' , null=True)
uploader = models.ForeignKey(settings.AUTH_USER_MODEL,null=True, blank=True, on_delete=models.SET_NULL)
album = models.ImageField(upload_to ='album/',null=True)
def __str__(self):
return "{} - {} - {} - {}- {}-{}".format(self.id, self.title, self.artist, self.song , self.uploader ,self.album)
模型注册的admin后台:
from django.contrib import admin
from .models import Songs
admin.site.register(Songs)
接下来,我们必须序列化这些模型。序列化器允许将复杂的数据和模型实例转换为python数据类型,可以轻松地通过JSON或XML进行传输。serializers还提供了很好的控制来操纵我们的输出响应。
from rest_framework import serializers
from .models import Songs
class SongsSerializer(serializers.ModelSerializer):
class Meta:
model = Songs
fields = ("id" , "title", "artist", "song" , "uploader" , "album")
使用此序列化器处理视图。打开views.py文件并添加获取和发布请求视图。
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import generics ,filters
from .models import Songs
from rest_framework import status
from .serializers import SongsSerializer
from rest_framework import permissions
class ListSongsView(generics.ListAPIView):
"""
Provides a get method handler.
"""
queryset = Songs.objects.all()
serializer_class = SongsSerializer
search_fields = ['title']
filter_backends = (filters.SearchFilter,)
# permission_classes = (permissions.IsAuthenticated,)
class PostSongsView(APIView):
def post(self,request ,*args,**kwargs):
serializer = SongsSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
在这里,queryset将Songs模型中存在的所有对象和进程列出视图。搜索字段可为视图添加搜索功能。在这里,我们使用歌曲标题搜索歌曲。我评论了权限类,该类仅限制登录用户的歌曲视图,实现身份验证后将不会对其进行注释。
现在让我们向这些视图添加URL
from django.urls import path
from .views import ListSongsView , PostSongsView
from django.views.decorators.csrf import csrf_exempt
urlpatterns = [
path('songs/', ListSongsView.as_view(), name="songs-all"),
path('songs1/', csrf_exempt(PostSongsView.as_view()), name="songs-all")
]
让我们为媒体创建一个默认文件夹(歌曲,用户头像)。将它们添加到api / settings.py。
MEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR, "media_root")
这使media_root成为每个媒体元素的基本目录。
现在让我们创建一个超级用户。
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
创建超级用户后,运行:
python manage.py runserver
现在使用django admin(127.0.0.1:8000/admin/music/songs/)添加一些示例歌曲
添加后,导航到歌曲端点以查看歌曲
http://127.0.0.1:8000/api/v1/songs/
在下一篇文章中,我们将使用jwt添加身份验证和安全性。