Vue项目后端部署
一、安装Django_Rest_FrameWork
按照y鸽的Django课上的内容是没有django framework的,所以我们需要自己安装
# 进入 我们的Docker
pip install djangorestframework
# 换源
pip install djangorestframework -i https://pypi.douban.com/simple
二、前端文件
详见视频hh
三、修改和创建文件
3.1
- 修改
/acapp/acapp/settings.py
有些是JWT的我们不需要可删除
# INSTALLED_APPS
INSTALLED_APPS = [
# 'rest_framework_simplejwt',
'rest_framework',
'channels',
'game.apps.GameConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
# REST_FRAMEWORK
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.IsAuthenticated',
'rest_framework.permissions.AllowAny',
],
# 'DEFAULT_AUTHENTICATION_CLASSES': (
# 'rest_framework_simplejwt.authentication.JWTAuthentication',
# )
}
3.2
-
创建
/acapp/game/urls/myspace/
-
在
/acapp/game/urls/myspace/
下创建index.py
from django.urls import path, re_path
from game.views.myspace.userlist import UserList
from game.views.myspace.getinfo import GetInfo
from game.views.myspace.post_view import PostView
from game.views.myspace.follow import FollowView
from game.views.myspace.player import PlayerView
from game.views.myspace.index import index
urlpatterns = [
path('userlist/', UserList.as_view(), name="myspace_playerlist"),
path('getinfo/', GetInfo.as_view(), name="myspace_getinfo"),
path('post/', PostView.as_view(), name="myspace_post"),
path('follow/', FollowView.as_view(), name="myspace_follow"),
path('user/', PlayerView.as_view(), name="myspace_user"),
re_path(r".*", index, name="myspace_index"),
]
- 修改
/acapp/game/urls/index.py
添加语句
path("myspace/", include("game.urls.myspace.index")),
3.3
-
创建
/acapp/game/views/myspace/
-
在
/acapp/game/views/myspace/
下创建__init__.py
、follow.py
、getinfo.py
、index.py
、player.py
、post_view.py
、userlist.py
__init__.py
follow.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from game.models.myspace.follow import Follow
from game.models.player.player import Player
class FollowView(APIView):
permission_classes = ([IsAuthenticated])
def post(self, request):
data = request.POST
source_id = request.user.id
target_id = int(data['target_id'])
fs = Follow.objects.filter(source=source_id, target=target_id)
if fs.exists():
player = Player.objects.get(user_id=target_id)
player.followerCount -= 1
player.save()
fs.delete()
else:
player = Player.objects.get(user_id=target_id)
player.followerCount += 1
player.save()
Follow.objects.create(source=source_id, target=target_id)
return Response({
'result': "success",
})
getinfo.py
from game.models.player.player import Player
from game.models.myspace.follow import Follow
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
class GetInfo(APIView):
permission_classes = ([IsAuthenticated])
def get(self, request):
try:
user_id = int(request.GET.get('user_id', 1))
me_id = request.user.id
player = Player.objects.get(user_id=user_id)
return Response({
'id': player.user.id,
'username': player.user.username,
'photo': player.photo,
'followerCount': player.followerCount,
'is_followed': Follow.objects.filter(source=me_id, target=user_id).exists()
})
except:
return Response({
'result': "输入参数错误"
})
index.py
from django.shortcuts import render
def index(request):
return render(request, "myspace/index.html")
player.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from game.models.player.player import Player
from django.contrib.auth.models import User
class PlayerView(APIView):
def post(self, request):
data = request.POST
username = data.get("username", "").strip()
password = data.get("password", "").strip()
password_confirm = data.get("password_confirm", "").strip()
if not username or not password:
return Response({
'result': "用户名和密码不能为空"
})
if password != password_confirm:
return Response({
'result': "两个密码不一致",
})
if User.objects.filter(username=username).exists():
return Response({
'result': "用户名已存在"
})
user = User(username=username)
user.set_password(password)
user.save()
Player.objects.create(user=user, photo="https://img2.baidu.com/it/u=2161949891,656888789&fm=26&fmt=auto")
return Response({
'result': "success"
})
post_view.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from game.models.myspace.post import Post
class PostView(APIView):
permission_classes = ([IsAuthenticated])
def get(self, request):
user = request.user
user_id = int(request.GET.get('user_id', 1))
posts = Post.objects.filter(user_id=user_id).order_by('-pk')
data = []
for post in posts:
data.append({
'id': post.id,
'content': post.content,
})
return Response(data)
def post(self, request):
Post.objects.create(user_id = request.user.id, content=request.POST.get('content', ''))
return Response({
'result': "success",
})
def delete(self, request, pk=None):
user = request.user
post_id = int(request.POST.get('post_id', 1))
Post.objects.filter(user_id=user.id, pk=post_id).delete()
return Response({
'result': "success",
})
userlist.py
from game.models.player.player import Player
from rest_framework.views import APIView
from rest_framework.response import Response
class UserList(APIView):
def get(self, request):
players = Player.objects.all().exclude(photo="https://img2.baidu.com/it/u=2161949891,656888789&fm=26&fmt=auto").order_by('id')[:10]
users = []
for player in players:
users.append({
'id': player.user.id,
'username': player.user.username,
'photo': player.photo,
'followerCount': player.followerCount
})
return Response(users)
3.4
- 创建
/acapp/game/models/myspace/
- 在
/acapp/game/models/myspace/
下创建__init__.py
、follow.py
、getinfo.py
、post.py
__init__.py
follow.py
from django.db import models
from django.contrib.auth.models import User
class Follow(models.Model):
source = models.IntegerField(default=0)
target = models.IntegerField(default=0)
def __str__(self):
return str(self.source) + ' - ' + str(self.target)
post.py
from django.db import models
from django.utils.timezone import now
class Post(models.Model):
user_id = models.IntegerField(default=0)
content = models.TextField(default="", max_length=1000, blank=True, null=True)
createtime = models.DateTimeField(default=now)
def __str__(self):
return str(self.user_id) + ' - ' + self.content
本地调试的时候,访问自己api会有跨域问题吗?
想问一下JWT怎么写