环境配置(WSL)
sudo apt update
sudo apt upgrade
sudo apt install python3-pip
MariaDB安装及配置
MariaDB和MySQL操作相同
sudo apt-get install software-properties-common
sudo add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main'
输入上方最后一条之后系统应该会报错,类似于
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F1656F24C74CD1D8
Reading package lists... Done
复制此处的F1656F24C74CD1D8
,用你的十六进制码代替下方的F1656F24C74CD1D8
curl -sL "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xF1656F24C74CD1D8" | sudo apt-key add
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64] http://mirror.zol.co.zw/mariadb/repo/10.3/ubuntu bionic main'
sudo apt update
sudo apt -y install mariadb-server mariadb-client
sudo apt install libmysqlclient-dev
设置数据库用户名和密码为root
。
mysql -uroot -p
# 输入密码
# 进入数据库
> create database oj default character set utf8 collate utf8_unicode_ci;
若报错ERROR 2002(HY000): Can't connnect to local MySQL server through socket '/var/run/mysqld/mysqld.sock (2)'
,尝试
sudo service mysql start
若失败,原因为WSL与宿主机共用端口,但宿主机3306端口被占用。
解决方法:关闭3306端口,重新尝试启动WSL下的MySQL。
Django安装及配置
在server/
目录下(注: pip
和python
的使用根据所在操作系统环境的不同可能需要pip3
和python3
)
pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
python manage.py runserver 0.0.0.0:8000
若提示缺少依赖,安装即可。
开发
项目结构
项目入口为oj/settings.py
,oj/dev_settings.py
和oj/production_settings.py
分别为开发环境和生产环境下的环境配置文件;oj/urls.py
为整个项目url入口。项目已将各模块初始化为以下相应app
:
- user
- course
- lecture
- lab
- exam
- problem
- submission
各app
文件目录如下:
- urls
- student.py
- admin.py
- statistics.py
- views
- student.py
- admin.py
- statistics.py
- models.py
- serializers.py
- tests.py
其中,数据中心各功能在views/statistics.py
中开发。
序列化
本项目利用rest_framework
下的serializers
类进行数据序列化,示例代码如下:
#demo/serializers.py
from rest_framework import serializers
from .models import Demo
class DemoSerializers1(serializers.Serializer):
content = serializers.CharField()
class DemoSerializers2(serializers.ModelSerializer):
class Meta:
model = Demo
fields = ('content', 'is_public')
# or fields = '__all__'
rest_framework
参考文档
rest_framework.serializers
参考文档
(不需要科学上网)
视图(view)开发
视图类APIView
在Django的view
类的基础上已经为大家进行封装,在开发相关视图时,只需导入并继承APIView
,并调用:
self.success
self.error
返回相应结果。示例代码如下:
# demo/views/oj.py
from utils.api import APIView
from ..serializers import DemoSerializers1
from ..models import Demo
class DemoAPI(APIView):
def get(self, request):
demo_id = request.GET.get('demo_id')
demo = Demo.objects.get(id=demo_id)
return self.success(DemoSerializers1(demo).data)
URL添加
首先,在oj/urls.py
中引入所在app
url的路径
#oj/urls.py
from django.conf.urls import include, url
urlpatterns = [
url(r"^api/", include("demo.urls.oj")),
#balabala
]
其次,在所在app
中的路径文件中添加相应视图的url
#demo/urls/oj.py
from django.conf.urls import url
from ..views.oj import DemoAPI
urlpatterns = [
url(r"^demo/?$", DemoAPI.as_view(), name="demo_content_api"),
]
Model开发
就在各app
下的models.py
啦~记得要python manage.py makemigrations
和``
最后
所有demo代码都可以在项目根目录下的demo文件夹下找到嗷~
祝大家开发愉快ᕕ(ᐛ)ᕗ