创建虚拟环境
# 新建文件夹vision
# 进入vision文件夹,使用以下命令安装虚拟环境
python -m venv venv
# 进入虚拟环境(windows)
# 在项目根目录创建文件(activate_venv.bat),输入以下内容
@echo off
REM 打开新的 PowerShell 并激活虚拟环境
powershell -NoExit -ExecutionPolicy Bypass -Command "venv\Scripts\Activate.ps1"
# 在cmd里运行该文件:
.\activate_venv.bat
# 进入虚拟环境(Linux/MacOs)
source venv/bin/activate
# 退出虚拟环境
deactivate
安装django和依赖管理
# 安装Django
pip install django
# 安装mysql
pip install mysqlclient
# 创建项目
django-admin startproject mysite .# 注意末尾的 . 表示在 当前目录 创建项目,而不是生成一个新的 vision/ 文件夹。
# 更新依赖清单:
pip freeze > requirements.txt
# 下次运行脚本:
pip install -r requirements.txt
创建项目里的app
# 创建web app
python manage.py startapp web
# 创建admins app
python manage.py startapp admins
# 在根目录的vision目录的settings.py里的INSTALLED_APPS数组添加内容:
INSTALLED_APPS = [
'django.contrib.admin',
...
'web',
'admins',
]
# 修改支持语言和时区
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
# 修改数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 不变
'NAME': 'your_db_name',
'USER': 'your_db_user',
'PASSWORD': 'your_password',
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {'charset': 'utf8mb4'}, # 避免中文乱码
}
}
查看django项目是否创建成功
# 输入以下命令:
python manage.py runserver # 浏览器打开http://127.0.0.1:8000,出现django页面表示成功
生成数据库对应的model文件
# 使用django自带的命令(django需要mysql>8.0.11)
python manage.py inspectdb tbl_user > web/models_auto.py
设置路由
# 在app的目录下(比如web)的urls.py写入以下内容(如果没有该文件,新建一个):
urlpatterns = [
path('', index, name='index'),
path('login/', login, name='login'),
]
# 在 site目录下(比如vision)的urls.py写入以下内容:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('web.urls')), # 把 web app 的路由包含进来
]
设置session
# 登录时设置session和cookie
# 登录成功,自己写 session
request.session["user_id"] = user.id
# 设置 cookie
response = JsonResponse({"code": "200", "msg": "登录成功"})
response.set_cookie("username", user.username, max_age=7*24*60*60) # 有效期 7 天
return response
# setting.py里写
# session 有效期 7 天(单位秒)
SESSION_COOKIE_AGE = 7 * 24 * 60 * 60
# 用户关闭浏览器是否清除 session
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # False:关闭浏览器不清除,True:关闭浏览器清除
# Session 存储方式(默认数据库)
SESSION_ENGINE = "django.contrib.sessions.backends.db"
# Cookie 名字
SESSION_COOKIE_NAME = "sessionid" # 可以改成 'web_session' 之类的
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'web.middleware.AuthMiddleware', # 你自己写的中间件
]
# 在app目录里新建middleware.py文件,写入以下内容
from django.shortcuts import redirect
from django.shortcuts import redirect
class AuthMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# 白名单(不需要登录的路径)
white_list = ["/", "/login/", "/register/"]
if request.path not in white_list:
user_id = request.session.get("user_id")
if not user_id: # 没登录或session过期
return redirect("/")
return self.get_response(request)
# 后端读取session
user_id = request.session.get("user_id")
# 前端读取cookie
function getCookie(name) {
let cookieArr = document.cookie.split(";"); // 拆分所有 cookie
for(let i = 0; i < cookieArr.length; i++) {
let cookiePair = cookieArr[i].trim().split("=");
if(cookiePair[0] === name) {
return decodeURIComponent(cookiePair[1]);
}
}
return null;
}
# 使用
let username = getCookie("username");
if(username) {
document.getElementById("username").innerText = username;
}
.gitignore文件内容
# Python
*.pyc
*.pyo
*.pyd
__pycache__/
*.env
# 虚拟环境
venv/
ENV/
env/
# Django
*.sqlite3
db.sqlite3
*.log
# IDE / 编辑器
.vscode/
.idea/
*.swp
*.swo
# 系统文件
.DS_Store
Thumbs.db
# PyInstaller 打包输出
dist/
build/
*.spec
# 其他缓存 / 临时文件
*.egg-info/