前言:本文將詳細介紹如何使用 Django 構建一個電影推薦系統,涵蓋項目的搭建、數據庫設計、視圖函數編寫、模板渲染以及用戶認證等多個方面。🔗軟件安裝、環境準備
??【作者主頁—📚優質文章、獲取更多優質源碼】
目錄
一 .項目搭建
二.數據庫設計?
三.編寫視圖函數
四.模版渲染?
五.效果展示
六.總結
七.更多干貨
一 .項目搭建
首先,我們需要創建一個新的 Django 項目
django-admin startproject demo1
cd demo1
?然后,創建一個名為?movies(自定義)
?的應用
python manage.py startapp movies
?在?demo1/settings.py?中進行相關配置,包括數據庫、應用安裝、模板路徑
# demo1/settings.py# 應用安裝
INSTALLED_APPS = ["django.contrib.admin","django.contrib.auth","django.contrib.contenttypes","django.contrib.sessions","django.contrib.messages","django.contrib.staticfiles","movies",
]# 數據庫配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'movie','USER': 'root','PASSWORD': '123456','HOST': '127.0.0.1','PORT': '3306'}
}# 模板路徑配置
TEMPLATES = [{"BACKEND": "django.template.backends.django.DjangoTemplates","DIRS": [os.path.join(BASE_DIR, 'templates')],"APP_DIRS": True,"OPTIONS": {"context_processors": ["django.template.context_processors.debug","django.template.context_processors.request","django.contrib.auth.context_processors.auth","django.contrib.messages.context_processors.messages",],},},
]
二.數據庫設計?
?在?movies/models.py?中定義電影和評論的模型
# movies/models.pyfrom django.db import models
from django.contrib.auth.models import Userclass Movie(models.Model):title = models.CharField(max_length=200)description = models.TextField()release_date = models.DateField()director = models.CharField(max_length=100)poster = models.ImageField(upload_to='文件夾名/', blank=True, null=True)average_rating = models.FloatField(default=0)def __str__(self):return self.titleclass Review(models.Model):movie = models.ForeignKey(Movie, on_delete=models.CASCADE, related_name='reviews')user = models.ForeignKey(User, on_delete=models.CASCADE)rating = models.IntegerField(choices=[(i, i) for i in range(1, 6)])comment = models.TextField()created_at = models.DateTimeField(auto_now_add=True)def __str__(self):return f"Review for {self.movie.title} by {self.user.username}"
?創建數據庫遷移文件并應用遷移
python manage.py makemigrations
python manage.py migrate
?下圖即是正確的數據庫表目錄
三.編寫視圖函數
在?movies/views.py?中編寫視圖函數,實現電影列表、電影詳情、添加評論、用戶登錄和退出功能
# movies/views.pyfrom django.shortcuts import render, redirect, get_object_or_404
from .models import Movie, Review
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate, login, logout
from django.contrib import messages
from django.db.models import Avg
from django.core.paginator import Paginatordef movie_list(request):search_query = request.GET.get('search', '')if search_query:movies = Movie.objects.filter(title__icontains=search_query)else:movies = Movie.objects.all()page_number = request.GET.get('page')page_obj = paginator.get_page(page_number)return render(request, 'movie_list.html', {'page_obj': page_obj, 'search_query': search_query})def movie_detail(request, movie_id):movie = get_object_or_404(Movie, id=movie_id)reviews = movie.reviews.all()return render(request, 'movie_detail.html', {'movie': movie, 'reviews': reviews})@login_required
def add_review(request, movie_id):movie = get_object_or_404(Movie, id=movie_id)if request.method == 'POST':rating = request.POST.get('rating')comment = request.POST.get('comment')Review.objects.create(movie=movie, user=request.user, rating=rating, comment=comment)# 更新電影平均評分movie.average_rating = movie.reviews.aggregate(Avg('rating'))['rating__avg']movie.save()return redirect('movie_detail', movie_id=movie.id)return render(request, 'add_review.html', {'movie': movie})def user_login(request):if request.method == 'POST':username = request.POST.get('username')password = request.POST.get('password')user = authenticate(request, username=username, password=password)if user is not None:login(request, user)return redirect('movie_list')else:messages.error(request, '用戶名或密碼錯誤')return render(request, 'login.html')@login_required
def user_logout(request):logout(request)return redirect('movie_list')
四.模版渲染?
?在?movies/templates
?目錄下創建相應的 HTML 模板文件,用于展示電影列表、電影詳情、添加評論和用戶登錄頁面。
電影列表模板?movie_list.html?
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>電影推薦系統</title>
----------------- css樣式代碼省略 -----------------
</head><body><nav><h1>電影推薦系統</h1><form action="" method="get"><input type="text" name="search" placeholder="搜索電影"><input type="submit" value="搜索"></form>{% if user.is_authenticated %}<a href="{% url 'user_logout' %}">退出登錄</a>{% else %}<a href="{% url 'user_login' %}">登錄</a>{% endif %}</nav><div class="movie-container">{% for movie in page_obj %}<div class="movie-card">{% if movie.poster %}<img src="{{ movie.poster.url }}" alt="{{ movie.title }}">{% else %}<img src="https://dummyimage.com/200x300/000/fff&text=No+Poster" alt="{{ movie.title }}">{% endif %}<div class="movie-info"><h2>{{ movie.title }}</h2><p>評分: {{ movie.average_rating }}</p><a href="{% url 'movie_detail' movie.id %}">查看詳情</a></div></div>{% endfor %}</div><div class="pagination">{% if page_obj.has_previous %}<a href="?page=1">« 第一頁</a><a href="?page={{ page_obj.previous_page_number }}">上一頁</a>{% endif %}<span class="current">第 {{ page_obj.number }} 頁,共 {{ page_obj.paginator.num_pages }} 頁。</span>{% if page_obj.has_next %}<a href="?page={{ page_obj.next_page_number }}">下一頁</a><a href="?page={{ page_obj.paginator.num_pages }}">最后一頁 »</a>{% endif %}</div>
</body></html>
?電影詳情模板?movie_detail.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>{{ movie.title }} 詳情</title>
-------------------- css樣式代碼省略 --------------------
</head><body><h1>{{ movie.title }}</h1><div class="movie-detail">{% if movie.poster %}<div class="movie-poster"><img src="{{ movie.poster.url }}" alt="{{ movie.title }}"></div>{% else %}<div class="movie-poster"><img src="https://dummyimage.com/300x450/000/fff&text=No+Poster" alt="{{ movie.title }}"></div>{% endif %}<div class="movie-info"><p>導演: {{ movie.director }}</p><p>上映日期: {{ movie.release_date }}</p><p>描述: {{ movie.description }}</p><p>評分: {{ movie.average_rating }}</p>{% if user.is_authenticated %}<a href="{% url 'add_review' movie.id %}">添加評論</a>{% endif %}</div></div><h2>用戶評論</h2>{% for review in reviews %}<div class="review"><p>用戶: {{ review.user.username }}</p><p>評分: {{ review.rating }}</p><p>評論: {{ review.comment }}</p><p>時間: {{ review.created_at|date:"Y-m-d" }}</p></div>{% endfor %}
</body></html>
五.效果展示
六.總結
希望本文對你有所幫助,如果你有任何疑問或建議,歡迎在評論區留言。
以上文章詳細介紹了如何使用 Django 構建電影推薦系統,從項目搭建到功能實現,每個步驟都有相應的代碼示例。你可以根據自己的需求進行修改和擴展。
七.更多干貨
--------------------- - -----?--------- ? ---------?--------------------?-------
1.如果我的博客對你有幫助或你喜歡我的博客內容,請 “👍點贊” “??評論” “★收藏” 一鍵三連哦!
2.??【👇🏻👇🏻👇🏻關注我| 獲取更多源碼 | 優質文章】 帶您學習各種前端插件、3D炫酷效果、圖片展示、文字效果、以及整站模板 、HTML模板 、微信小程序模板 、等! 「在這里一起探討知識,互相學習」!
3.以上內容技術相關問題?歡迎一起交流學習 ? ? ? ? ?
————————————————