1.使用命令行生成Django项目
django-admin startproject mysite
2.创建项目虚拟环境
virtualenv venv
source venv/bin/activate
deactivate
3.生成requirements.txt文件
pip3 freeze >requirements.txt
pip3 install -r requirements.txt
4.创建app
python3 manage.py startapp polls
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myApp' ]
配置数据库
// 做好本地环境、测试环境与正式环境的区分
class mysql_environment(Enum):
local = 0
test = 1
formal = 2
class mysql_name(Enum):
'''
'''
local = 'plan_wall'
test = 'plan_wall_test'
formal = ''
class mysql_user(Enum):
'''
'''
local = 'root'
test = 'test_plan'
formal = ''
class mysql_pswd(Enum):
'''
'''
local = ''
test = ''
formal = ''
// 每次只需要更改这个数值就行
environment = mysql_environment.local
MYSQL_ENV = environment
if MYSQL_ENV == mysql_environment.local:
sql_name = mysql_name.local.value
sql_user = mysql_user.local.value
sql_pswd = mysql_pswd.local.value
elif MYSQL_ENV == mysql_environment.test:
sql_name = mysql_name.test.value
sql_user = mysql_user.test.value
sql_pswd = mysql_pswd.test.value
else:
sql_name = mysql_name.formal.value
sql_user = mysql_user.formal.value
sql_pswd = mysql_pswd.formal.value
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': str(sql_name),
'USER': str(sql_user),
'PASSWORD': str(sql_pswd),
'HOST':'localhost',
'PORT':'3306',
'OPTIONS': {'charset':'utf8mb4'},
}
}
// 配置mysql, pymysql
// 在__init__.py 文件中写入两行代码
import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)
pymysql.install_as_MySQLdb()
4.配置路由
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('login/', include('apps.login.urls'))
]
from django.urls import path
from . import views
urlpatterns = [
path('v1/register', views.UserRegister.as_view()),
]
5.创建模型
class UserInfo(models.Model):
avatar = models.CharField(max_length=256, verbose_name='头像', default='', null=True, blank=True)
username = models.CharField(max_length=32, verbose_name='用户名', default='', null=True, blank=True)
password = models.CharField(max_length=64, verbose_name='密码')
phone_number = models.CharField(max_length=32, verbose_name='手机号', default='', null=True,blank=True)
email = models.CharField(max_length=32, verbose_name='邮箱', default='', null=True, blank=True)
create_time = models.DateTimeField('注册时间', auto_now_add=True)
internal = models.IntegerField(default=1)
is_delete = models.IntegerField(default=0)
class Meta:
verbose_name = '用户信息'
verbose_name_plural = verbose_name
class UserToken(models.Model):
user = models.OneToOneField(to='UserInfo', on_delete=models.CASCADE)
token = models.CharField(max_length=64)
class Meta:
verbose_name = '用户token'
verbose_name_plural = verbose_name
def __str__(self):
return self.token
6.迁移数据库
python3 manage.py makemigrations
python3 manage.py migrate
7.运行项目
python3 manage.py runserver
8.设置认证权限
from apps.login.models import UserToken
from rest_framework.authentication import BaseAuthentication
from rest_framework import exceptions
class Authtication(BaseAuthentication):
def authenticate(self, request):
token = request.data.get('token')
token_obj = UserToken.objects.filter(token=token).first()
if not token_obj:
raise exceptions.AuthenticationFailed('用户认证失败')
return (token_obj.user, token_obj)
def authenticate_header(self, request):
pass