Django框架课-用户名密码登录
Django框架课-用户名密码登录
创建账号系统
建立player表
数据库里的表对应的是django里的class
进入acapp/game/models里。models文件夹里是存放数据库表的。
新建player文件夹,添加一个__init__.py
(touch __init__.py
)
然后写player.py
表
vim player.py
(如果忘记了一些指令或者关键字库名等,可以使用python3 manage.py shell
打开交互式界面,这个可以自动补全来提示.exit
可以退出)
player.py
class Player(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
photo = models.URLField(max_length = 256,blank = True)
def __str__(self):
return str(self.user)
至此,定义了一张player表,有两个关键字:user
(用于表示player和哪个user是一一对应的)、photo
(用户头像)
将player表注册到管理员页面
打开acapp/game/admin.py
from django.contrib import admin
from game.models.player.player import Player
# Register your models here.
admin.site.register(Player);
然后执行两句话,将我们的表应用到数据库里
python3 manage.py makemigrations
python3 manage.py migrate
然后登录django的管理员界面app4346.acapp.acwing.com.cn/admin/
,可以看到多了一个用户组player,可以直接在这里新加一个用户试试。
如何判断前端是web端还是acapp端
export class AcGame {
constructor(id,AcWingOS){ // acapp端会传AcWingOS(一些接口),web端不穿这个参数
this.id = id;
this.$ac_game = $('#' + id);
this.AcWingOS = AcWingOS;
this.menu = new AcGameMenu(this);
this.playground = new AcGamePlayground(this);
this.start();
}
start(){
}
}
主类加一个AcWingOS
参数,acapp就会传这个参数,web端只传id这个参数
client端向server端请求信息
client会向server端请求信息,要完成views、urls、js三部分
刚开始写代码,将所有的请求类型使用get来写,更容易调试。
写views的函数等
用户的信息放入acapp/game/views/settings里,未来settings里可以设置信息
acapp/game/views/settings/getinfo.py
from django.http import JsonResponse
from game.models.player.player import Player
def getinfo_acapp(request):
player = Player.objects.all()[0]
return JsonResponse({
'result':'success',
'username':player.user.username,
'photo':player.photo,
})
def getinfo_web(request):
player = Player.objects.all()[0]
return JsonResponse({
'result':'success',
'username':player.user.username,
'photo':player.photo,
})
def getinfo(request):
platform = request.GET.get('platform')
if platform == "ACAPP":
return getinfo_acapp(request)
else:
return getinfo_web(request)
写urls:
修改acapp/game/urls/settings/index.py
from django.urls import path
from game.views.settings.getinfo import getinfo
urlpatterns = [
path("getinfo/",getinfo,name="settings_getinfo"),
]
访问app4346.acapp.acwing.com.cn/settings/getinfo/:
client向server请求网址,getinfo函数返回给client信息。
写js
38:00
settings/zbase.js
渲染前端页面、向后端请求数据
写js:登录注册界面
写js、调css
传头像图片,渲染头像
实现登录、注册、退出登录动作
这三个功能都与后端有所交互,每一个都要views、urls、js一块写。
前端登录与注册的跳转
先把每个元素都“扣”出来,然后去绑定函数
“扣出来”说的是取到这个div
、input
这个元素,比如下面这个要扣出来ac-game-settings-login
类div标签
this.$login = this.$settings.find(".ac-game-settings-login");
然后需要实现点击绑定函数:
点注册->跳转到注册界面,点登陆->到登录页面,这些是在前端做的事情
登录功能
与后端交互数据写老三样:views
、urls
、js
views是一些处理数据的函数,urls是每一个函数对应一个url、js是写前端的内容
js去携带这用户输入的账号密码,对url发送get请求,将数据通过views对应的函数发送到服务器进行验证,然后返回json结果。