pycharm python3.6 Django2.0 mysql 用户登录与注册系统

本文详细介绍了使用PyCharm、Python3.6和Django2.0结合MySQL创建用户登录与注册系统的过程。涵盖项目创建、数据库模型设计、数据库迁移、admin后台设置、URL路由与视图、Bootstrap引入、模板基础、登录注册视图、Django表单、图片验证码和Session会话管理等关键步骤。
摘要由CSDN通过智能技术生成

一、创建项目

1.1.创建项目和app

django-admin startproject mysite_login

python manage.py startapp login

1.2.设置时区和语言

Django默认使用美国时间和英语,在项目的settings文件中,如下所示:

复制代码
LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True
复制代码

我们把它改为亚洲/上海时间和中文

复制代码
LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False
复制代码

1.3.启动

运行测试一下工程,在本机的浏览器中访问http://127.0.0.1:8000/

 二、设计数据模型

 2.1.数据库模型设计

 作为一个用户登录和注册项目,需要保存的都是各种用户的相关信息。很显然,我们至少需要一张用户表User,在用户表里需要保存下面的信息:

  • 用户名
  • 密码
  • 邮箱地址
  • 性别
  • 创建时间

 进入login/models.py,代码如下

复制代码
# login/models.py

from django.db import models


class User(models.Model):
    '''用户表'''

    gender = (
        ('male',''),
        ('female',''),
    )

    name = models.CharField(max_length=128,unique=True)
    password = models.CharField(max_length=256)
    email = models.EmailField(unique=True)
    sex = models.CharField(max_length=32,choices=gender,default='')
    c_time = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

    class Meta:
        ordering = ['c_time']
        verbose_name = '用户'
        verbose_name_plural = '用户'
    
复制代码

各字段含义:

  • name必填,最长不超过128个字符,并且唯一,也就是不能有相同姓名;
  • password必填,最长不超过256个字符(实际可能不需要这么长);
  • email使用Django内置的邮箱类型,并且唯一;
  • 性别使用了一个choice,只能选择男或者女,默认为男;
  • 使用__str__帮助人性化显示对象信息;
  • 元数据里定义用户按创建时间的反序排列,也就是最近的最先显示;

注意:这里的用户名指的是网络上注册的用户名,不要等同于现实中的真实姓名,所以采用了唯一机制。如果是现实中可以重复的人名,那肯定是不能设置unique的。

 2.2.设置数据库为Mysql

在settings.py修改

复制代码
 
 
import pymysql
.............
pymysql.install_as_MySQLdb()

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',        #数据库名字
        'USER': 'root',          #账号
        'PASSWORD': '123456',      #密码
        'HOST': '127.0.0.1',    #IP
        'PORT': '3306',                   #端口
    }
}
复制代码
 

  2.3.数据库迁移

注册app

复制代码
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'login',
]
复制代码

迁移到数据库

python manage.py makemigrations

python manage.py migrate

三、admin后台

3.1.在admin中注册模型

复制代码
# login/admin.py

from django.contrib import admin
from . import models

admin.site.register(models.User)
复制代码

 3.2.创建超级管理员

python manage.py createsuperuser

然后再增加几个测试用户

 

 

 四、url路由和视图

 前面我们已经创建好数据模型了,并且在admin后台中添加了一些测试用户。下面我们就要设计好站点的url路由、对应的处理视图函数以及使用的前端模板了。

 4.1.路由设计

初步设想需要下面的四个URL:

 

考虑到登录系统属于站点的一级功能,为了直观和更易于接受,这里没有采用二级路由的方式,而是在根路由下直接编写路由条目,同样也没有使用反向解析名(name参数)。

复制代码
# mysite_login/urls.py

from django.conf.urls import path
from django.contrib import admin
from login import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    path('login/', views.login),
    path('register/', views.register),
    path('logout/', views.logout),
    path('captcha', include('captcha.urls'))
]
复制代码

4.2.架构初步视图

路由写好了,就进入login/views.py文件编写视图的框架,代码如下:

复制代码
# login/views.py

from django.shortcuts import render,redirect

def index(request):
    pass
    return render(request,'login/index.html')

def login(request):
    pass
    return render(request,'login/login.html')

def register(request):
    pass
    return render(request,'login/register.html')

def logout(request):
    pass
    return redirect('/index/')
复制代码

我们先不着急完成视图内部的具体细节,而是把框架先搭建起来。

4.3.创建HTML页面文件

在项目根路径的templates目录,再在templates目录里创建一个login目录

templates/login目录中创建三个文件index.htmllogin.html以及register.html ,并写入如下的代码:

index.html

复制代码
{% extends 'base.html' %}
{% block title %}主页{% endblock %}
{% block content %}
    {% if request.session.is_login %}
    <h1>你好,{
  { request.session.user_name }}!欢迎回来!</h1>
    {% else %}
    <h1>你尚未登录,只能访问公开内容!</h1>
    {% endif %}
{% endblock %}
复制代码

login.html

复制代码
{% extends 'login/base.html' %}
{% load staticfiles %}
{% block title %}登录{% endblock %}
{% block css %}
    <link rel="stylesheet" href="{% static 'css/login.css' %}">
{% endblock %}


{% block content %}
    <div class="container">
        <div class="col-md-4 col-md-offset-4">
          <form class='form-login' action="/login/" method="post">

              {% if 
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bysjlwdx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值