Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1)
- pip install django
- 2)
- django-admin startproject music_streaming_service
- cd music_streaming_service
- 3)python manage.py startapp musicapp
- 4)
- from django.db import models
- from django.contrib.auth.models import User
- class Artist(models.Model):
- name = models.CharField(max_length=100)
- def __str__(self):
- return self.name
- class Album(models.Model):
- title = models.CharField(max_length=100)
- artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
- def __str__(self):
- return self.title
- class Genre(models.Model):
- name = models.CharField(max_length=50)
- def __str__(self):
- return self.name
- class Track(models.Model):
- title = models.CharField(max_length=100)
- file = models.FileField(upload_to='tracks/')
- artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
- album = models.ForeignKey(Album, on_delete=models.CASCADE, null=True, blank=True)
- genre = models.ManyToManyField(Genre)
- uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE)
- def __str__(self):
- return self.title
- class Playlist(models.Model):
- name = models.CharField(max_length=100)
- user = models.ForeignKey(User, on_delete=models.CASCADE)
- tracks = models.ManyToManyField(Track)
- def __str__(self):
- return self.name
- 5)INSTALLED_APPS = [
- # ...
- 'musicapp',
- ]
- 6)
- from django import forms
- from .models import Track, Playlist
- class TrackUploadForm(forms.ModelForm):
- class Meta:
- model = Track
- fields = ['title', 'file', 'artist', 'album', 'genre']
- class PlaylistForm(forms.ModelForm):
- class Meta:
- model = Playlist
- fields = ['name', 'tracks']
- widgets = {
- 'tracks': forms.CheckboxSelectMultiple(),
- }
- 7)from django.shortcuts import render, redirect
- from django.contrib.auth.decorators import login_required
- from .models import Track, Playlist
- from .forms import TrackUploadForm, PlaylistForm
- from django.db.models import Q
- def home(request):
- tracks = Track.objects.all()
- query = request.GET.get('q')
- if query:
- tracks = tracks.filter(
- Q(title__icontains=query) |
- Q(artist__name__icontains=query) |
- Q(album__title__icontains=query) |
- Q(genre__name__icontains=query)
- ).distinct()
- return render(request, 'musicapp/home.html', {'tracks': tracks})
- @login_required
- def upload_track(request):
- if request.method == 'POST':
- form = TrackUploadForm(request.POST, request.FILES)
- if form.is_valid():
- track = form.save(commit=False)
- track.uploaded_by = request.user
- track.save()
- form.save_m2m()
- return redirect('home')
- else:
- form = TrackUploadForm()
- return render(request, 'musicapp/upload_track.html', {'form': form})
- @login_required
- def create_playlist(request):
- if request.method == 'POST':
- form = PlaylistForm(request.POST)
- if form.is_valid():
- playlist = form.save(commit=False)
- playlist.user = request.user
- playlist.save()
- form.save_m2m()
- return redirect('my_playlists')
- else:
- form = PlaylistForm()
- return render(request, 'musicapp/create_playlist.html', {'form': form})
- @login_required
- def my_playlists(request):
- playlists = Playlist.objects.filter(user=request.user)
- return render(request, 'musicapp/my_playlists.html', {'playlists': playlists})
- def play_track(request, track_id):
- track = Track.objects.get(id=track_id)
- return render(request, 'musicapp/play_track.html', {'track': track})
- 8.1)from django.contrib import admin
- from django.urls import path, include
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('', include('musicapp.urls')),
- ]
- 9)
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Музыкальный Стриминг Сервис</title>
- </head>
- <body>
- <header>
- <h1><a href="{% url 'home' %}">Музыкальный Стриминг Сервис</a></h1>
- {% if user.is_authenticated %}
- <p>Привет, {{ user.username }} | <a href="{% url 'logout' %}">Выйти</a></p>
- {% else %}
- <p><a href="{% url 'login' %}">Войти</a> | <a href="{% url 'signup' %}">Регистрация</a></p>
- {% endif %}
- <nav>
- <a href="{% url 'upload_track' %}">Загрузить Трек</a> |
- <a href="{% url 'my_playlists' %}">Мои Плейлисты</a>
- </nav>
- <form method="get" action="{% url 'home' %}">
- <input type="text" name="q" placeholder="Поиск...">
- <button type="submit">Поиск</button>
- </form>
- </header>
- <hr>
- {% block content %}
- {% endblock %}
- </body>
- </html>
- 9.1)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <h2>Все Треки</h2>
- <ul>
- {% for track in tracks %}
- <li>
- <a href="{% url 'play_track' track.id %}">{{ track.title }}</a> - {{ track.artist.name }}
- </li>
- {% empty %}
- <li>Нет доступных треков.</li>
- {% endfor %}
- </ul>
- {% endblock %}
- 9.2)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <h2>Загрузить Трек</h2>
- <form method="post" enctype="multipart/form-data">
- {% csrf_token %}
- {{ form.as_p }}
- <button type="submit">Загрузить</button>
- </form>
- {% endblock %}
- 9.3)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <h2>Загрузить Трек</h2>
- <form method="post" enctype="multipart/form-data">
- {% csrf_token %}
- {{ form.as_p }}
- <button type="submit">Загрузить</button>
- </form>
- {% endblock %}
- 9.4)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <h2>{{ track.title }} - {{ track.artist.name }}</h2>
- <audio controls>
- <source src="{{ track.file.url }}" type="audio/mpeg">
- Ваш браузер не поддерживает аудио.
- </audio>
- {% endblock %}
- 9.5)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <h2>Создать Плейлист</h2>
- <form method="post">
- {% csrf_token %}
- {{ form.as_p }}
- <button type="submit">Создать</button>
- </form>
- {% endblock %}
- 9.6)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <h2>Мои Плейлисты</h2>
- <ul>
- {% for playlist in playlists %}
- <li>{{ playlist.name }}</li>
- {% empty %}
- <li>У вас нет плейлистов.</li>
- {% endfor %}
- </ul>
- {% endblock %}
- 10.1)
- from django.contrib import admin
- from django.urls import path, include
- from django.contrib.auth import views as auth_views
- from musicapp import views as music_views
- urlpatterns = [
- path('admin/', admin.site.urls),
- path('', include('musicapp.urls')),
- path('login/', auth_views.LoginView.as_view(template_name='musicapp/login.html'), name='login'),
- path('logout/', auth_views.LogoutView.as_view(template_name='musicapp/logout.html'), name='logout'),
- path('signup/', music_views.signup, name='signup'),
- ]
- 10.2)
- from django.contrib.auth import login, authenticate
- from django.contrib.auth.forms import UserCreationForm
- def signup(request):
- if request.method == 'POST':
- form = UserCreationForm(request.POST)
- if form.is_valid():
- user = form.save()
- login(request, user)
- return redirect('home')
- else:
- form = UserCreationForm()
- return render(request, 'musicapp/signup.html', {'form': form})
- 10.3)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <h2>Войти</h2>
- <form method="post">
- {% csrf_token %}
- {{ form.as_p }}
- <button type="submit">Войти</button>
- </form>
- {% endblock %}
- 10.4)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <h2>Регистрация</h2>
- <form method="post">
- {% csrf_token %}
- {{ form.as_p }}
- <button type="submit">Зарегистрироваться</button>
- </form>
- {% endblock %}
- 10.5)
- {% extends 'musicapp/base.html' %}
- {% block content %}
- <p>Вы вышли из системы.</p>
- {% endblock %}
- 11.1)
- import os
- MEDIA_URL = '/media/'
- MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
- 11.2)
- from django.conf import settings
- from django.conf.urls.static import static
- urlpatterns = [
- # ... ваши URL-маршруты
- ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
- 11.3)
- python manage.py runserver
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement