1.准备apps包,用于管理所有应用
2.在apps包下创建应用users
$ cd ~/projects/meiduo_project/meiduo_mall/meiduo_mall/apps $ python ../../manage.py startapp users
重要提示:
已知导包路径
已知 'users’应用所在目录
得到导入’users’应用的导包路径是:meiduo_mall/apps/users
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'meiduo_mall.apps.users', # 用户模块应用 ]
注册完users应用后,运行测试程序。
思考:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users', # 用户模块应用 ]
分析:
已知导包路径
已知’users’应用所在目录
若要直接以应用名’users’注册
解决办法
* 追加导包路径:`meiduo_project/meiduo_mall/meiduo_mall/apps`
1.查看项目BASE_DIR
2.追加导包路径
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users', # 用户模块应用 ]
重新注册完users应用后,运行测试程序。
查看导包路径
追加导包路径
加载页面静态文件
美多商城-注册
class RegisterView(View): """用户注册""" def get(self, request): """ 提供注册界面 :param request: 请求对象 :return: 注册界面 """ return render(request, 'register.html')
1.总路由
urlpatterns = [ # users url(r'^', include('users.urls', namespace='users')), ]
2.子路由
urlpatterns = [ # 注册 url(r'^register/$', views.RegisterView.as_view(), name='register'), ]
Django自带用户认证系统
Django认证系统位置
Django认证系统同时处理认证和授权
Django认证系统包含的内容
Django认证系统中提供了用户模型类User保存用户的数据。
Django认证系统用户模型类位置
父类AbstractUser介绍
User对象基本属性
创建用户(注册用户)的方法
user = User.objects.create_user(username, email, password, **extra_fields)
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password, **kwargs)
* 处理密码的方法 * 设置密码:`set_password(raw_password)` * 校验密码:`check_password(raw_password)` ### 3. 自定义用户模型类 > 思考:为什么要自定义用户模型类? * 观察注册界面会发现,美多商城`注册数据`中`必选用户mobile信息`。 * 但是Django默认用户模型类中没有mobile字段,所以要自定义用户模型类。 如何自定义用户模型类? * 继承自**AbstractUser**(可通过阅读Django默认用户模型类的源码得知) 。 * 新增`mobile`字段。 ```python from django.db import models from django.contrib.auth.models import AbstractUser # Create your models here. class User(AbstractUser): """自定义用户模型类""" mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号') class Meta: db_table = 'tb_users' verbose_name = '用户' verbose_name_plural = verbose_name def __str__(self): return self.username
思考:为什么Django默认用户模型类是User?
AUTH_USER_MODEL = 'auth.User'
结论:
配置规则:
AUTH_USER_MODEL = '应用名.模型类名'
# 指定本项目用户模型类 AUTH_USER_MODEL = 'users.User'
1.创建迁移文件
2.执行迁移文件
对于接口的设计,我们要根据具体的业务逻辑,设计出适合业务逻辑的接口。
设计接口的思路:
分析要实现的业务逻辑:
分析接口的功能任务,明确接口的访问方式与返回数据:
1.请求方式
选项 | 方案 |
---|---|
请求方法 | POST |
请求地址 | /register/ |
2.请求参数:表单参数
参数名 | 类型 | 是否必传 | 说明 |
---|---|---|---|
username | string | 是 | 用户名 |
password | string | 是 | 密码 |
password2 | string | 是 | 确认密码 |
mobile | string | 是 | 手机号 |
sms_code | string | 是 | 短信验证码 |
allow | string | 是 | 是否同意用户协议 |
3.响应结果:HTML
响应结果 | 响应内容 |
---|---|
注册失败 | 响应错误提示 |
注册成功 | 重定向到首页 |
1.注册视图
class RegisterView(View): """用户注册""" def get(self, request): """ 提供注册界面 :param request: 请求对象 :return: 注册界面 """ return render(request, 'register.html') def post(self, request): """ 实现用户注册 :param request: 请求对象 :return: 注册结果 """ pass
2.总路由
urlpatterns = [ # users url(r'^', include('users.urls', namespace='users')), ]
3.子路由
urlpatterns = [ # 注册 url(r'^register/$', views.RegisterView.as_view(), name='register'), ]
提供注册界面 :param request: 请求对象 :return: 注册界面 """ return render(request, 'register.html') def post(self, request): """ 实现用户注册 :param request: 请求对象 :return: 注册结果 """ pass
> **2.总路由** ```python urlpatterns = [ # users url(r'^', include('users.urls', namespace='users')), ]
3.子路由
urlpatterns = [ # 注册 url(r'^register/$', views.RegisterView.as_view(), name='register'), ]