Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (9.0%) to scientific vocabulary
Keywords
Repository
国防知识竞赛
Basic Info
- Host: GitHub
- Owner: BITNP
- Language: Python
- Default Branch: main
- Homepage: https://contest.bitnp.net
- Size: 2.31 MB
Statistics
- Stars: 5
- Watchers: 1
- Forks: 4
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
README.md
contest-bitnp 国防知识竞赛
目录
开发
技术细节请参考doc/。
Note
还可参考 GitHub Actions。
开始
⚒️ 安装工具
Poetry
例如
poetry shell可在终端直接使用虚拟环境。
安装方法:请参阅 Introduction | Documentation | Poetry。
配置
完成安装后,建议您选择将虚拟环境放在项目中:
shell
$ poetry config virtualenvs.in-project true
原因:这样
poetry install时会在项目所在文件夹创建.venv/,比C:/Users/…/AppData/Local/pypoetry/Cache/…或~/.cache/pypoetry/…更明显。
Just
- 功能:本项目源代码不在根目录,有许多命令执行时有 tricks。因此建议安装 just,用 just 调用。
例如,运行 mypy 时,必须使用正确配置在正确的位置运行。
shell
$ just --list # 列出可用任务
- 安装方法(Unix)
建议参考 Packages - Just Programmer's Manual,使用包管理器安装。
- 安装方法(Windows)
下载编译好的可执行文件,解压出just.exe,放到$PATH环境变量包含的任意地方。另外也可用包管理器 scoop 安装:
```powershell
scoop install just ```
在 Windows 上,除了 just,您还需要选个 shell。至少有下面几种选择。
将
C:/Program Files/Git/bin/添加到$PATH环境变量,使用 Git for Windows 附带的 Git Bash(sh.exe)。也使用 Git Bash,但不用环境变量,而用 scoop 包装:创建
~/scoop/shims/sh.shim,写入path = "C:/Program Files/Git/usr/sh.exe"。编辑项目根目录的
justfile,使用 Command Prompt 或 PowerShell。```just
在 justfile 开头加上以下任意一行
set shell := ["cmd.exe", "/c"] set shell := ["powershell.exe", "-c"]
更改后请勿提交到仓库中,因为CI和每人的设备不一样。
```
Note
C:/Program Files/Git/指 Git 的安装目录。另外注意是
…/Git/bin/,而非…/Git/usr/bin/。Note
可用
--shell临时测试,例如:
shell $ just --shell 'C:/Program Files/Git/usr/bin/bash.exe' …
- 配置
如果需控制 just 使用哪个 python,请在项目根目录创建.env文件,设置PYTHON变量。下面是一些例子。
```toml # 使用项目中的虚拟环境 PYTHON = "./.venv/Scripts/python.exe"
# 使用 poetry 缓存中的环境 PYTHON = "C:/Users/bjalp/AppData/Local/pypoetry/Cache/virtualenvs/…/python.exe"
# 直接调用 poetry(万能,但比较慢) PYTHON = "poetry run python" ```
Note
poetry install创建虚拟环境后,可用poetry env info查看“Executable”的位置。
Pnpm
功能:构建前端 CSS 和 JavaScript。
安装方法
前往 Node.js 网站,下载并安装 v18 LTS。(安装结束后会提示安装 choco,可取消勾选)
使用 corepack 安装 pnpm。
shell $ corepack enable $ corepack prepare pnpm@latest --activate
Note
也可尝试 Installation | pnpm 介绍的其它方法。
👢 安装包
初次使用时,需要安装项目依赖的包并创建数据库:
shell
$ just update
以后拉取他人提交后,如果他人更新了依赖或更改了数据模型,你可能无法继续开发,此时也请just update。
🏃♀️ 启动服务器
- 构建前端。
shell
$ just build-js build-theme
Note
如果你想更改前端代码,可
just watch-js、just watch-theme来自动重新构建。
- 启动 Django 服务器。
shell
$ just serve
- 访问 localhost:8000,用户名、密码请咨询他人。
✅ 检查
- 代码质量
shell
$ just check-all
这会检查类型、运行测试等。
- 格式(可选)
本项目配置了 pre-commit,可自动格式化代码、检查错别字等。
如果你想使用它,那么可用 pip 或 pipx 安装 pre-commit,然后运行pre-commit install。此后提交到仓库时会自动检查格式。
Note
git commit --no-verify可绕过 pre-commit。
VS Code
任务
部分 just 命令配备了 problem matcher。Ctrl+P,输入task及空格,按提示操作可运行。
Django 魔法
VS Code 默认的 Pylance 无法识别很多 Django 魔法(如*_set)。可考虑禁用之,代以 Matan Gover 的 Mypy。(也可并用)这需要你在工作区设置mypy.dmypyExecutable,目前的设置仅适用于 Windows。
部署
容器部署
准备工作
为减小镜像,用 pip 替代 poetry,需将pyproject.toml的tool.poetry.dependencies、tool.poetry.group.deploy.dependencies转换为requirements.txt。
shell
$ poetry export --output requirements.txt --without-hashes --without-urls --with deploy
Note
现在仓库中的
requirements.txt还手动删除了python_version、sys_platform,没考虑 python 版本、操作系统不同的问题。之后出问题了再改。
构建容器镜像
shell
$ git clone https://github.com/BITNP/contest-bitnp
$ cd contest-bitnp
$ docker build -t everything411/contest-bitnp .
构建过程中会做以下几件事:
- 用 pnpm 构建前端。
- 设置用于生产的环境变量。
- 安装依赖,整理静态文件,添加题库,启动服务。
从头开始使用容器进行部署
编写docker-compose.yml
dockerfile
version: "3"
services:
web:
image: everything411/contest-bitnp
ports:
- 8080:80
environment:
- SECRET_KEY=${SECRET_KEY}
- DJANGO_PRODUCTION=1
volumes:
- ./db:/usr/src/app/db # 数据库持久化
- ./fixtures:/usr/src/app/fixtures # 放fixtures,加载题目用
# - ./settings.py:/usr/src/app/contest/settings.py # 取消注释可临时调整设置
然后
shell
$ mkdir db
$ docker compose up -d
然后进去容器内部,创建超级管理员账号,导入:
shell
$ docker exec -it contest_web_1 bash
(in container) # python manage.py createsuperuser
(in container) # python manage.py loaddata fixtures/*.yml
手动部署
Note
可用
python -m venv替代 poetry,手动执行替代 just。
```bash $ export DJANGOPRODUCTION="任何非空字符串" $ export SECRETKEY="The secret key must be a large random value and it must be kept secret"
$ echo 'PYTHON = "./.venv/bin/python"' > .env $ just update # 安装依赖、数据库等 $ just check-deploy # 检查 ```
Note
若希望部署时永远开放答题,请
export DJANGO_DISABLE_QUIZ_OPENING_TIME_INTERVAL="任何非空字符串"。
在 poetry 中安装部署依赖组后,可以使用 uvicorn 或者 gunicorn 来运行本网站:
使用 uvicorn 单线程运行:
shell
$ export DJANGO_PRODUCTION=1
$ export SECRET_KEY="!!replace me replace me!!"
$ cd contest-bitnp
$ uvicorn contest.asgi::application
或者使用 gunicorn 管理多个 uvicorn 工作进程:
shell
$ export DJANGO_PRODUCTION=1
$ export SECRET_KEY="!!replace me replace me!!"
$ cd contest-bitnp
$ gunicorn -w 4 -k uvicorn.workers.UvicornWorker contest.asgi:application
Owner
- Name: NetPioneer Association
- Login: BITNP
- Kind: organization
- Email: webmaster@bitnp.net
- Location: Beijing, China
- Website: https://www.bitnp.net
- Repositories: 13
- Profile: https://github.com/BITNP
网络开拓者协会 at Beijing Institute of Technology, China
GitHub Events
Total
- Delete event: 23
- Push event: 13
- Pull request event: 23
- Create event: 22
Last Year
- Delete event: 23
- Push event: 13
- Pull request event: 23
- Create event: 22
Issues and Pull Requests
Last synced: 10 months ago
All Time
- Total issues: 0
- Total pull requests: 5
- Average time to close issues: N/A
- Average time to close pull requests: about 14 hours
- Total issue authors: 0
- Total pull request authors: 2
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 4
- Bot issues: 0
- Bot pull requests: 5
Past Year
- Issues: 0
- Pull requests: 5
- Average time to close issues: N/A
- Average time to close pull requests: about 14 hours
- Issue authors: 0
- Pull request authors: 2
- Average comments per issue: 0
- Average comments per pull request: 0.0
- Merged pull requests: 4
- Bot issues: 0
- Bot pull requests: 5
Top Authors
Issue Authors
- YDX-2147483647 (3)
- everything411 (1)
Pull Request Authors
- dependabot[bot] (21)
- YDX-2147483647 (11)
- pre-commit-ci[bot] (6)
- everything411 (1)
- InitialMoon (1)
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- actions/cache v3 composite
- actions/checkout v3 composite
- actions/download-artifact v3 composite
- actions/setup-node v3 composite
- actions/setup-python v4 composite
- actions/upload-artifact v3 composite
- pnpm/action-setup v2 composite
- taiki-e/install-action v2 composite
- @babel/core ^7.22.9 development
- @babel/preset-env ^7.22.9 development
- @rollup/plugin-babel ^6.0.3 development
- @rollup/plugin-commonjs ^25.0.3 development
- @rollup/plugin-node-resolve ^15.1.0 development
- @rollup/plugin-terser ^0.4.3 development
- rimraf ^5.0.1 development
- rollup ^3.27.0 development
- sweetalert2 ^11.7.20
- 235 dependencies
- @tailwindcss/aspect-ratio ^0.4.2 development
- @tailwindcss/forms ^0.5.3 development
- @tailwindcss/line-clamp ^0.4.4 development
- @tailwindcss/typography ^0.5.9 development
- cross-env ^7.0.3 development
- postcss ^8.4.24 development
- postcss-import ^15.1.0 development
- postcss-nested ^6.0.1 development
- postcss-simple-vars ^7.0.1 development
- rimraf ^5.0.1 development
- tailwindcss ^3.3.2 development
- 128 dependencies
- appnope 0.1.3
- asgiref 3.7.2
- asttokens 2.2.1
- backcall 0.2.0
- black 22.12.0
- certifi 2023.7.22
- charset-normalizer 3.2.0
- click 8.1.4
- colorama 0.4.6
- coverage 7.2.7
- decorator 5.1.1
- django 4.2.3
- django-browser-reload 1.11.0
- django-cas-ng 4.3.0
- django-coverage-plugin 3.1.0
- django-stubs 4.2.3
- django-stubs-ext 4.2.2
- django-tailwind 3.6.0
- executing 1.2.0
- humanize 4.7.0
- idna 3.4
- ipython 8.14.0
- jedi 0.18.2
- lxml 4.9.3
- matplotlib-inline 0.1.6
- mypy 1.4.1
- mypy-extensions 1.0.0
- parso 0.8.3
- pathspec 0.11.1
- pexpect 4.8.0
- pickleshare 0.7.5
- platformdirs 3.8.1
- prompt-toolkit 3.0.39
- ptyprocess 0.7.0
- pure-eval 0.2.2
- pygments 2.15.1
- python-cas 1.6.0
- requests 2.31.0
- six 1.16.0
- sqlparse 0.4.4
- stack-data 0.6.2
- tomli 2.0.1
- traitlets 5.9.0
- types-pytz 2023.3.0.0
- types-pyyaml 6.0.12.10
- typing-extensions 4.7.1
- tzdata 2023.3
- urllib3 2.0.4
- wcwidth 0.2.6
- Django ^4.2
- django-cas-ng ^4.3.0
- django-tailwind ^3.6.0
- humanize ^4.7.0
- python ^3.9
- node 18-slim build
- python 3-slim build
- asgiref ==3.7.2
- certifi ==2023.7.22
- charset-normalizer ==3.2.0
- click ==8.1.4
- colorama ==0.4.6
- django ==4.2.3
- django-cas-ng ==4.3.0
- django-tailwind ==3.6.0
- gunicorn ==21.2.0
- h11 ==0.14.0
- humanize ==4.7.0
- idna ==3.4
- lxml ==4.9.3
- packaging ==23.1
- python-cas ==1.6.0
- pyyaml ==6.0.1
- requests ==2.31.0
- six ==1.16.0
- sqlparse ==0.4.4
- typing-extensions ==4.7.1
- tzdata ==2023.3
- urllib3 ==2.0.4
- uvicorn ==0.23.2