Django注册,登陆操作步骤

一:

  将所有的静态文件(css,js,前端第三方库)都默认放在static文件夹,并且在settings中配置:

# 接口前缀  默认情况下这个前缀跟静态文件夹名字一样(跟你的静态文件夹的名字一点关系都没有)
STATIC_URL = '/static/'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'), # 就是你的静态文件夹路径
    os.path.join(BASE_DIR,'static1'),
    os.path.join(BASE_DIR,'static2')
]
# ps:会依次查找列表中所有的静态文件路径 找到的话立刻停止,都没有找到返回404

 二:

  创建应用:python manage.py startapp app01,修改配置文件

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config' # 添加应用
]

三:

  在应用中的reg中写好注册页面(reg.html):

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
{#    注意 把css文件,和js文件改为本地的,因为会有提示#}
    <link rel="stylesheet" href="staticootstrap-3.3.7cssootstrap.min.css">
    <script src="staticootstrap-3.3.7jsootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-info">register</h1>
        <div class="col-md-6 col-md-offset-3">
{#            action="":注意这里form表单的默认提交地址为自身(/reg)#}
{#            提交方式由默认的get改为post#}
            <form action="" method="post">
                <p class="text-info">username:<input type="text" name="username" class="form-control"></p>
                <p class="text-info">password:<input type="password" name="password" class="form-control"></p>
                <input type="submit" class="btn btn-primary">
            </form>
        </div>
    </div>
</div>
</body>
</html>

  ps:这里有一个注意点,此时点击提交按钮会报错,解决方法,在项目的settings文件中修改配置:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware', 点击提交报错,注释掉这一行
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

 四:

  连接Django和Mysql数据库:

  1,修改配置文件:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # 修改引擎
        'NAME': 'mydatabase', # 数据库名
        'HOST': '127.0.0.1', # IP
        'PORT': 3306, # mysql端口
        'USER': 'root', # 用户名
        'PASSWORD': '641220' # 密码
    }
}

  2,告诉django用pymysql替换它默认mysqldb模块连接数据库:

    方式1:在你的项目文件夹下面的__init__.py

    方式2:也可以在你的应用文件夹下面的__init__.py

import pymysql
pymysql.install_as_MySQLdb()  # 告诉django用pymysql代替mysqldb连接数据库

  3,django的orm不能帮你自动的创建库,但是可以帮你自动的创建表(一个django工程就使用一个库)

    在应用的models中创建一个类,映射到数据库的表:

from django.db import models
# Create your models here.
class User(models.Model):
    # user表的主键字段名就是id
    id = models.AutoField(primary_key=True)
    # varchar(32) name字段是varchar(32)   CharField在定义的时候必须要加max_length参数
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=16)
    def __str__(self):
        return self.name

  4,数据库迁移:

    1:将你的数据库变动记录到一个小本本上(并不会帮你创建表) (python manage.py makemigrations)

    2:将你的数据库变动正在同步到数据库中 (python manage.py migrare)

      此时这张表已经创建完毕。

五:

  在views中配置reg函数:

def reg(request):
    # 判断请求方式
    if request.method == 'POST':
        username = request.POST.get('username') # get中的名称对应 html表中 input标签中name的值
        password = request.POST.get('password')
        # 插入方式一:
        # user_obj = models.User.objects.create(name=username,password=password)
        # 插入方式二:
        user_obj = models.User(name=username,password=password)
        user_obj.save()  # 对象调用save方法保存到数据库
    return render(request,'reg.html')

  由于注册成功之后需要展示信息,因此需要创建userlist.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link rel="stylesheet" href="staticootstrap-3.3.7cssootstrap.min.css">
    <script src="staticootstrap-3.3.7jsootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="title">show data</h1>
        <div class="col-md-8 col-md-offset-2">
            <table class="table-hover table table-bordered table-striped">
                <thead>
                    <tr>
                        <th>id</th>
                        <th>name</th>
                        <th>password</th>
                    </tr>
                </thead>
                <tbody>
{#                将生成的一行放在for循环里面,每有一个对象就会生成一行#}
                {% for user_obj in user_list %}
                    <tr>
                        <td>{{ user_obj.id }}</td>
                        <td>{{ user_obj.name }}</td>
                        <td>{{ user_obj.password }}</td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

  在views中配置userlist函数:

def userlist(request):
    # 获取数据库数据
    user_list = models.User.objects.all()  # select id,name,password form user;
    # print(user_list.query)  # 只要是QuerySet就可以点query查看获取到当前QuerySet对象的内部sql语句
    # for user_obj in user_list:
    #     print(user_obj.pk,user_obj.name)
    return render(request,'userlist.html',locals())

  注册成功

六:

  登陆功能,设置login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
{#    注意 把css文件,和js文件改为本地的,因为会有提示#}
    <link rel="stylesheet" href="staticootstrap-3.3.7cssootstrap.min.css">
    <script src="staticootstrap-3.3.7jsootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-info">login</h1>
        <div class="col-md-6 col-md-offset-3">
{#            action="":注意这里form表单的默认提交地址为自身(/reg)#}
{#            提交方式由默认的get改为post#}
            <form action="" method="post">
                <p class="text-info">username:<input type="text" name="username" class="form-control"></p>
                <p class="text-info">password:<input type="password" name="password" class="form-control"></p>
                <input type="submit" class="btn btn-primary">
            </form>
        </div>
    </div>
</div>
</body>
</html>

  配置登陆函数

def login(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 拿到整个表的数据
        user_list = models.User.objects.all()
        for user_obj in user_list:
            if user_obj.name == username:
                if user_obj.password == password:
                    return HttpResponse('login successful') # 校验成功返回login successful
        return HttpResponse('login failure') # 校验失败返回login failure
    return render(request,'login.html')

  完成注册,登陆功能。

 

   

  

原文地址:https://www.cnblogs.com/ay742936292/p/10986594.html