我们的网站需要提供用户功能,但是又由于Django自带的用户User功能过于简单,因此我们创建 users app 来扩展用户信息以及功能。
创建app
我们使用 python3 manage.py startapp users 来创建app
之后需要注意的几个点有
1)将我们创建的app添加到 schnee/settings.py 的 INSTALLED_APPS 中。
2)将我们的app的 urls 包含到 schnee/urls.py 中,如下:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('users/', include('users.urls', namespace = 'users')),
]
app设计
我们在 users app中创建有两个 model, 分别是 UserInfo(扩展用户信息),Message(用于用户间通信以及接收通知)
models.py 中为users 的模型,分别为 用户信息(UserInfo),消息(Message)
UseInfo中的基本属性有 user(一对一关联Django的User), nickname, gender, intro, email, profile(头像)
class UserInfo(models.Model):
GENDER_CHOICES = (
(u'M', u'Male'),
(u'F', u'Female'),
)
user = models.OneToOneField(User, on_delete = models.CASCADE, related_name="user")
nickname = models.CharField(max_length=20, default="Undefined")
gender = models.CharField(max_length=6, choices=GENDER_CHOICES, default="Male")
intro = models.CharField(max_length=200, default="hello world")
email = models.EmailField(max_length=70, blank=True, default="Undefined@example.com")
# 用户头像使用 imagekit 库来处理头像,包括进行图像压缩,转码等等
profile = ProcessedImageField(upload_to='user/img', default='user/img/default.jpg',
processors=[ResizeToFill(500, 500)], format='JPEG', options={'quality': 60})
def __str__(self):
return self.nickname
Message中基本属性有 sender,text, date_added,receiver(外键关联User), is_Read,sender_del,receiver_del (标记是否被发送者以及收信人删除,若均为True则删除该信息)
class Message(models.Model):
sender = models.CharField(max_length=20)
text = models.CharField(max_length=2000)
date_added = models.DateTimeField(auto_now_add=True)
receiver = models.ForeignKey(User, on_delete=models.CASCADE)
is_Read = models.BooleanField(default=False)
sender_del = models.BooleanField(default=False)
receiver_del = models.BooleanField(default=False)
def __str__(self):
return self.text
完成模型的设计后我们要转到 users/admin.py, 对我们的模型进行注册,这样我们就能够在后台对模型进行管理,除此之外,我们还能够自定义后台能够操作的数据,这个是之后的事情啦。示例代码:
from django.contrib import admin
from users.models import UserInfo, Message
admin.site.register(UserInfo)
admin.site.register(Message)
views.py主要提供了登陆,登出,注册的功能,还有就是消息发送,接受信息的功能。
urls.py 规定了链接的url,基础的功能的url如下所示
from django.urls import path
from users import views
#在Django2.0 以上版本中,没有app_name会出错
app_name = 'users'
urlpatterns = [
# 基础功能
path('login/', views.login_view, name = 'login'),
path('logout/', views.logout_view, name = 'logout'),
path('register/', views.register, name = 'register'),
path('notice/', views.notice, name = 'notice'),
path('settings/', views.settings, name = 'settings'),
path('reset_password/', views.reset_password, name = 'reset_password'),
path('reset_done/', views.reset_done, name = 'reset_done'),
]
数据库相关操作
每次添加新的模型,以及对模型进行修改之后都需要执行下面两条命令以更新数据库
python3 manage.py makemigrations
python3 manage.py migrate
users 这个app对于整个网站至关重要,很多功能都需要关系到用户权限,因此我们先在这里讲一下users app的设计。之后随着用户功能的扩展,会为模型添加更多的属性,以及在views.py中实现更多的方法,之后的博文中会详细说明。