个人网站搭建(Day 2)— My first app:users

我们的网站需要提供用户功能,但是又由于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="[email protected]")
    # 用户头像使用 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中实现更多的方法,之后的博文中会详细说明。

 

 

你可能感兴趣的:(个人网站搭建)