Django的用户表创建(四)

在完成了之前的事情之后,接下来就是实现注册功能了。

  • 判断用户名是否为空,是否已注册

  • 判断邮箱是否为空,是否已注册

  • 判断密码是否为空,格式是否正确确认密码的输入,所以我们会在前端中增加一列。

  • 判断确认密码与密码是否相同

请求方法POST

url定义/register/

请求参数:url路径参数

参数类型前端是否必须传描述
username字符串用户输入的用户名
password字符串用户输入的密码
password_repeat字符串用户输入的重复密码
email字符串用户输入的邮箱地址

注:由于是post请求,在向后端发起请求时,需要附带csrf token

加入我们需要完成注册,那就需要把这三个字段username,password,email存入到数据库中

  • 创建数据库,设计表结构和字段

  • 使用 MySQLdb 来连接数据库,并编写数据访问层代码

  • 业务逻辑层去调用数据访问层执行数据库操作

ORM是什么?:(在django中,根据代码中的类自动生成数据库的表也叫--code first)

也就是说django与数据库的交互被写在了黑盒子里面了,如果我们要用只需要知道输入,不用管黑盒子是MySQL、Oracle、sqlite还是其他乱七八糟的数据库,它都会按照我们的需求输出正确的操作。

640?wx_fmt=png
ORM系统

下面我们打开 apps/login/models.py开始编写数据库相关约束。
1id = models.AutoField() 
2username = models.CharField()
3password = models.CharField()
4email = models.EmailField()

了解一下常用的类型,接触过数据库的应该都知道

  1. IntegerField : 整型,映射到数据库中的int类型。

  2. CharField:  字符类型,映射到数据库中的varchar类型,通过max_length指定最大长度。

  3. TextField:  文本类型,映射到数据库中的text类型。

  4. BooleanField: 布尔类型,映射到数据库中的tinyint类型,在使用的时候,传递True/False进去。如果要可以为空,则用NullBooleanField。

  5. DateField:  日期类型,没有时间。映射到数据库中是date类型,

  6. DateTimeField:   日期时间类型。映射到数据库中的是datetime类型,

但是写了这些还不够的,因为用户名,密码,邮箱等都需要进行一定的约束,id一般是作为主键from django.contrib.auth.models import AbstractUser按住ctrl+AbstractUser跳进去。

 1class AbstractUser(AbstractBaseUser, PermissionsMixin):
 2    """
 3    An abstract base class implementing a fully featured User model with
 4    admin-compliant permissions.
 5
 6    Username and password are required. Other fields are optional.
 7    """
 8    username_validator = UnicodeUsernameValidator()
 9
10    username = models.CharField(
11        _('username'),
12        max_length=150,
13        unique=True,
14        help_text=_('Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.'),
15        validators=[username_validator],
16        error_messages={
17            'unique': _("A user with that username already exists."),
18        },
19    )
20    first_name = models.CharField(_('first name'), max_length=30, blank=True)
21    last_name = models.CharField(_('last name'), max_length=150, blank=True)
22    email = models.EmailField(_('email address'), blank=True)
23    is_staff = models.BooleanField(
24        _('staff status'),
25        default=False,
26        help_text=_('Designates whether the user can log into this admin site.'),
27    )
28    is_active = models.BooleanField(
29        _('active'),
30        default=True,
31        help_text=_(
32            'Designates whether this user should be treated as active. '
33            'Unselect this instead of deleting accounts.'
34        ),
35    )
36    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
37
38    objects = UserManager()
39
40    EMAIL_FIELD = 'email'
41    USERNAME_FIELD = 'username'
42    REQUIRED_FIELDS = ['email']
43
44    class Meta:
45        verbose_name = _('user')
46        verbose_name_plural = _('users')
47        abstract = True
48
49    def clean(self):
50        super().clean()
51        self.email = self.__class__.objects.normalize_email(self.email)
52
53    def get_full_name(self):
54        """
55        Return the first_name plus the last_name, with a space in between.
56        """
57        full_name = '%s %s' % (self.first_name, self.last_name)
58        return full_name.strip()
59
60    def get_short_name(self):
61        """Return the short name for the user."""
62        return self.first_name
63
64    def email_user(self, subject, message, from_email=None, **kwargs):
65        """Send an email to this user."""
66        send_mail(subject, message, from_email, [self.email], **kwargs)

在变成我们自己的代码之前先了解以下里面的东西吧:

  • primary_key:  指定是否为主键。

  • unique:  指定是否唯一。

  • null:  指定是否为空,默认为False。

  • blank: 等于True时form表单验证时可以为空,默认为False。

  • default:  设置默认值。

  • DateField.auto_now:  每次修改都会将当前时间更新进去,只有调用,QuerySet.update方法将不会调用。这个参数只是Date和DateTime以及TimModel.save()方法才会调用e类才有的。

  • DateField.auto_now_add:  第一次添加进去,都会将当前时间设置进去。以后修改,不会修改这个值创建时间更新时间。而且这两个内容在全部表中都可以被应用到。所以我们封装一个基类好了。

 1from django.db import models
 2
 3class ModelBase(models.Model):
 4    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
 5    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
 6    is_delete = models.BooleanField(default=False, verbose_name='逻辑删除')
 7
 8    class Meta:
 9        # 为抽象模型类,用于其他模型来继承,数据库迁移时不会创建ModelBase表
10        abstract = True

所以我们的用户表的model文件就是:

 1from django.db import models
 2
 3from utils.models import ModelBase
 4
 5
 6class User(ModelBase):
 7    id = models.AutoField(primary_key=True)
 8    username = models.CharField(
 9        max_length=30,
10        unique=True,
11    )
12    password = models.CharField(
13        max_length=30,
14    )
15    email = models.EmailField()
16
17    class Meta:
18        ordering = ['-update_time', '-id']
19        db_table = "tb_user"  # 指明数据库表名
20
21    def __str__(self):  # 这个__str__方法的作用将在查询时看到
22        return f'User<id={self.id},username={self.username},email={self.email}'

表名为tb_user

数据库迁移

640?wx_fmt=png
运行manage.py

找到Tools中的 Run manage.py Task...
首先输入 makemigrations login
再输入 migrate login
640?wx_fmt=png
数据库迁移

可以打开数据库可视化工具查看
640?wx_fmt=png
数据库展示

以上就完成了用户表的创建,不过里面的一些约束条件什么的感觉还是有点问题,但是应该不影响正常的使用(无法应对破坏性的测试)。之后修改 models之后在使用 makemigrations [app name]migrate [app name]就可以修改表结构了。以后出问题了再改好了,问题驱动开发是比较合理的模式,毕竟在一开始就面面俱到难度不是一般的大。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个使用Python编写的开源Web应用框架,它提供了一系列的库和工具来帮助开发者快速构建和部署高质量的Web应用程序。在Django创建用户可以通过以下步骤完成: 1. 安装Django:首先,你需要安装Python和Django。可以通过pip命令在命令行中安装Django:`pip install django`。 2. 创建Django项目:使用Django-admin命令在命令行中创建一个新的Django项目:`django-admin startproject myproject`。 3. 进入项目目录:进入到你的项目目录中:`cd myproject`。 4. 创建应用:Django项目可以包含多个应用。使用Django-admin命令在命令行中创建一个新的应用:`python manage.py startapp myapp`。 5. 定义用户模型:打开myapp文件夹中的models.py文件,定义用户模型。可以继承Django提供的现成的用户模型类(如django.contrib.auth.models.User),或者自定义一个用户模型类。 6. 迁移数据库:在定义完用户模型后,需要运行数据库迁移命令来创建相应的数据。在命令行中运行:`python manage.py makemigrations`和`python manage.py migrate`。 7. 创建用户:现在可以在Python shell中通过调用用户模型类的方法来创建用户。首先,进入Python shell:`python manage.py shell`。然后,创建一个新的用户:`from myapp.models import User`,`user = User.objects.create(username='username', password='password')`。 8. 验证用户:可以通过调用用户模型类的方法验证用户的身份。在Python shell中,运行以下命令:`user.check_password('password')`,如果返回True,则示密码正确。 9. 用户登录:在Django中,可以使用内置的认证系统来实现用户登录功能。在视图函数中,使用`authenticate()`函数来验证用户的身份,并使用`login()`函数将用户登录。 以上就是使用Django创建用户的简要步骤。通过这些步骤,可以在Django项目中创建和管理用户,实现用户认证和授权等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值