zoukankan      html  css  js  c++  java
  • 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')

      完成注册,登陆功能。

     

       

      

  • 相关阅读:
    P1012 拼数(水题)
    oracle 存储过程中调用同义词报错“表和视图不存在”
    C#文件相对路径
    C# WebAPi接收和发送图片
    EFCore学习笔记一:(安装EFCore并根据Code First生成数据库)
    Winform切换登录用户
    Winform中子控件Dock排列顺序问题
    ORA-28001: the password has expired解决方法
    C#实体类生成XML(注意<![CDATA]>标签的不解析)
    一次完整的HTTP请求过程
  • 原文地址:https://www.cnblogs.com/ay742936292/p/10986594.html
Copyright © 2011-2022 走看看