Advertisement
Guest User

Untitled

a guest
Sep 13th, 2024
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.51 KB | None | 0 0
  1. 1)
  2. pip install django
  3. 2)
  4. django-admin startproject music_streaming_service
  5. cd music_streaming_service
  6. 3)python manage.py startapp musicapp
  7. 4)
  8. from django.db import models
  9. from django.contrib.auth.models import User
  10.  
  11. class Artist(models.Model):
  12. name = models.CharField(max_length=100)
  13.  
  14. def __str__(self):
  15. return self.name
  16.  
  17. class Album(models.Model):
  18. title = models.CharField(max_length=100)
  19. artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
  20.  
  21. def __str__(self):
  22. return self.title
  23.  
  24. class Genre(models.Model):
  25. name = models.CharField(max_length=50)
  26.  
  27. def __str__(self):
  28. return self.name
  29.  
  30. class Track(models.Model):
  31. title = models.CharField(max_length=100)
  32. file = models.FileField(upload_to='tracks/')
  33. artist = models.ForeignKey(Artist, on_delete=models.CASCADE)
  34. album = models.ForeignKey(Album, on_delete=models.CASCADE, null=True, blank=True)
  35. genre = models.ManyToManyField(Genre)
  36. uploaded_by = models.ForeignKey(User, on_delete=models.CASCADE)
  37.  
  38. def __str__(self):
  39. return self.title
  40.  
  41. class Playlist(models.Model):
  42. name = models.CharField(max_length=100)
  43. user = models.ForeignKey(User, on_delete=models.CASCADE)
  44. tracks = models.ManyToManyField(Track)
  45.  
  46. def __str__(self):
  47. return self.name
  48. 5)INSTALLED_APPS = [
  49. # ...
  50. 'musicapp',
  51. ]
  52. 6)
  53. from django import forms
  54. from .models import Track, Playlist
  55.  
  56. class TrackUploadForm(forms.ModelForm):
  57. class Meta:
  58. model = Track
  59. fields = ['title', 'file', 'artist', 'album', 'genre']
  60.  
  61. class PlaylistForm(forms.ModelForm):
  62. class Meta:
  63. model = Playlist
  64. fields = ['name', 'tracks']
  65. widgets = {
  66. 'tracks': forms.CheckboxSelectMultiple(),
  67. }
  68.  
  69. 7)from django.shortcuts import render, redirect
  70. from django.contrib.auth.decorators import login_required
  71. from .models import Track, Playlist
  72. from .forms import TrackUploadForm, PlaylistForm
  73. from django.db.models import Q
  74.  
  75. def home(request):
  76. tracks = Track.objects.all()
  77. query = request.GET.get('q')
  78. if query:
  79. tracks = tracks.filter(
  80. Q(title__icontains=query) |
  81. Q(artist__name__icontains=query) |
  82. Q(album__title__icontains=query) |
  83. Q(genre__name__icontains=query)
  84. ).distinct()
  85. return render(request, 'musicapp/home.html', {'tracks': tracks})
  86.  
  87. @login_required
  88. def upload_track(request):
  89. if request.method == 'POST':
  90. form = TrackUploadForm(request.POST, request.FILES)
  91. if form.is_valid():
  92. track = form.save(commit=False)
  93. track.uploaded_by = request.user
  94. track.save()
  95. form.save_m2m()
  96. return redirect('home')
  97. else:
  98. form = TrackUploadForm()
  99. return render(request, 'musicapp/upload_track.html', {'form': form})
  100.  
  101. @login_required
  102. def create_playlist(request):
  103. if request.method == 'POST':
  104. form = PlaylistForm(request.POST)
  105. if form.is_valid():
  106. playlist = form.save(commit=False)
  107. playlist.user = request.user
  108. playlist.save()
  109. form.save_m2m()
  110. return redirect('my_playlists')
  111. else:
  112. form = PlaylistForm()
  113. return render(request, 'musicapp/create_playlist.html', {'form': form})
  114.  
  115. @login_required
  116. def my_playlists(request):
  117. playlists = Playlist.objects.filter(user=request.user)
  118. return render(request, 'musicapp/my_playlists.html', {'playlists': playlists})
  119.  
  120. def play_track(request, track_id):
  121. track = Track.objects.get(id=track_id)
  122. return render(request, 'musicapp/play_track.html', {'track': track})
  123.  
  124. 8.1)from django.contrib import admin
  125. from django.urls import path, include
  126.  
  127. urlpatterns = [
  128. path('admin/', admin.site.urls),
  129. path('', include('musicapp.urls')),
  130. ]
  131.  
  132. 9)
  133. <!DOCTYPE html>
  134. <html lang="en">
  135. <head>
  136. <meta charset="UTF-8">
  137. <title>Музыкальный Стриминг Сервис</title>
  138. </head>
  139. <body>
  140. <header>
  141. <h1><a href="{% url 'home' %}">Музыкальный Стриминг Сервис</a></h1>
  142. {% if user.is_authenticated %}
  143. <p>Привет, {{ user.username }} | <a href="{% url 'logout' %}">Выйти</a></p>
  144. {% else %}
  145. <p><a href="{% url 'login' %}">Войти</a> | <a href="{% url 'signup' %}">Регистрация</a></p>
  146. {% endif %}
  147. <nav>
  148. <a href="{% url 'upload_track' %}">Загрузить Трек</a> |
  149. <a href="{% url 'my_playlists' %}">Мои Плейлисты</a>
  150. </nav>
  151. <form method="get" action="{% url 'home' %}">
  152. <input type="text" name="q" placeholder="Поиск...">
  153. <button type="submit">Поиск</button>
  154. </form>
  155. </header>
  156. <hr>
  157. {% block content %}
  158. {% endblock %}
  159. </body>
  160. </html>
  161. 9.1)
  162. {% extends 'musicapp/base.html' %}
  163.  
  164. {% block content %}
  165. <h2>Все Треки</h2>
  166. <ul>
  167. {% for track in tracks %}
  168. <li>
  169. <a href="{% url 'play_track' track.id %}">{{ track.title }}</a> - {{ track.artist.name }}
  170. </li>
  171. {% empty %}
  172. <li>Нет доступных треков.</li>
  173. {% endfor %}
  174. </ul>
  175. {% endblock %}
  176. 9.2)
  177. {% extends 'musicapp/base.html' %}
  178.  
  179. {% block content %}
  180. <h2>Загрузить Трек</h2>
  181. <form method="post" enctype="multipart/form-data">
  182. {% csrf_token %}
  183. {{ form.as_p }}
  184. <button type="submit">Загрузить</button>
  185. </form>
  186. {% endblock %}
  187. 9.3)
  188. {% extends 'musicapp/base.html' %}
  189.  
  190. {% block content %}
  191. <h2>Загрузить Трек</h2>
  192. <form method="post" enctype="multipart/form-data">
  193. {% csrf_token %}
  194. {{ form.as_p }}
  195. <button type="submit">Загрузить</button>
  196. </form>
  197. {% endblock %}
  198. 9.4)
  199. {% extends 'musicapp/base.html' %}
  200.  
  201. {% block content %}
  202. <h2>{{ track.title }} - {{ track.artist.name }}</h2>
  203. <audio controls>
  204. <source src="{{ track.file.url }}" type="audio/mpeg">
  205. Ваш браузер не поддерживает аудио.
  206. </audio>
  207. {% endblock %}
  208.  
  209. 9.5)
  210. {% extends 'musicapp/base.html' %}
  211.  
  212. {% block content %}
  213. <h2>Создать Плейлист</h2>
  214. <form method="post">
  215. {% csrf_token %}
  216. {{ form.as_p }}
  217. <button type="submit">Создать</button>
  218. </form>
  219. {% endblock %}
  220. 9.6)
  221. {% extends 'musicapp/base.html' %}
  222.  
  223. {% block content %}
  224. <h2>Мои Плейлисты</h2>
  225. <ul>
  226. {% for playlist in playlists %}
  227. <li>{{ playlist.name }}</li>
  228. {% empty %}
  229. <li>У вас нет плейлистов.</li>
  230. {% endfor %}
  231. </ul>
  232. {% endblock %}
  233.  
  234. 10.1)
  235. from django.contrib import admin
  236. from django.urls import path, include
  237. from django.contrib.auth import views as auth_views
  238. from musicapp import views as music_views
  239.  
  240. urlpatterns = [
  241. path('admin/', admin.site.urls),
  242. path('', include('musicapp.urls')),
  243. path('login/', auth_views.LoginView.as_view(template_name='musicapp/login.html'), name='login'),
  244. path('logout/', auth_views.LogoutView.as_view(template_name='musicapp/logout.html'), name='logout'),
  245. path('signup/', music_views.signup, name='signup'),
  246. ]
  247. 10.2)
  248. from django.contrib.auth import login, authenticate
  249. from django.contrib.auth.forms import UserCreationForm
  250.  
  251. def signup(request):
  252. if request.method == 'POST':
  253. form = UserCreationForm(request.POST)
  254. if form.is_valid():
  255. user = form.save()
  256. login(request, user)
  257. return redirect('home')
  258. else:
  259. form = UserCreationForm()
  260. return render(request, 'musicapp/signup.html', {'form': form})
  261.  
  262. 10.3)
  263. {% extends 'musicapp/base.html' %}
  264.  
  265. {% block content %}
  266. <h2>Войти</h2>
  267. <form method="post">
  268. {% csrf_token %}
  269. {{ form.as_p }}
  270. <button type="submit">Войти</button>
  271. </form>
  272. {% endblock %}
  273.  
  274. 10.4)
  275. {% extends 'musicapp/base.html' %}
  276.  
  277. {% block content %}
  278. <h2>Регистрация</h2>
  279. <form method="post">
  280. {% csrf_token %}
  281. {{ form.as_p }}
  282. <button type="submit">Зарегистрироваться</button>
  283. </form>
  284. {% endblock %}
  285.  
  286. 10.5)
  287. {% extends 'musicapp/base.html' %}
  288.  
  289. {% block content %}
  290. <p>Вы вышли из системы.</p>
  291. {% endblock %}
  292. 11.1)
  293. import os
  294.  
  295. MEDIA_URL = '/media/'
  296. MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
  297. 11.2)
  298. from django.conf import settings
  299. from django.conf.urls.static import static
  300.  
  301. urlpatterns = [
  302. # ... ваши URL-маршруты
  303. ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  304. 11.3)
  305. python manage.py runserver
  306.  
  307.  
  308.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement