第二篇:Django自定义登录功能

目录

  • 自定义登录功能

    • 创建静态文件夹(static文件夹)

      • 静态文件
      • 静态文件夹(static)
    • django静态文件配置
      • 基本配置
      • 静态资源动态绑定
    • post请求需要修改配置文件
    • form表单回顾
    • 获取请求方式(request.method
    • request对象方法
    • djangoMySQL连接★
    • django orm简介
    • 字段的增删改查
      • 字段的增
      • 字段的查
      • 字段的改
      • 字段的删
    • 数据的增删改查

自定义登录功能

创建静态文件夹(static文件夹)

views.py中创建的视图函数,会需要用到一些css样式和js对象,如果还是通过CDN加速的方式,从网络调用,会显得不安全,当服务器网络发生故障的时候,会导致css样式和js对象加载不出来,因此我们需要将这些静态文件放到本地存放。

静态文件

css文件,js文件,图片,字体,以及一些第三方的框架(bootstrap,sweetalert, fontawesome)

静态文件夹(static)

解耦合,方便维护管理。

针对这些静态文件,我们需要为其创建一个专门的文件夹,这样可以显得不是很杂乱,也可以统一进行管理,一般我们会命名为static,结构如下:

static
    - css      网站用到的所有css文件
    - js       网站用到的所有js文件
    - image    网站用到的所有图片文件

    第三方文件

django静态文件配置

基本配置

在settings.py中修改:

STATIC_URL = '/static/'  # 访问后端静态资源的接口前缀  默认情况下接口前缀名与静态文件名保持一致
        """
        <link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.min.css">
        你要想访问后端的静态资源 你必须以接口前缀开头 后面跟上具体的文件路径 才能够访问到对应的资源

        当你的接口前缀正确之后  会拿着后面的路径依次去下面列表中的每一个文件夹下查找对应的资源
        顺序是从上往下依次查找 如果都没有找到才会报错
        """
STATICFILES_DIRS = [
            os.path.join(BASE_DIR,'static'),  # 这里的static才是你文件夹的路径
            os.path.join(BASE_DIR,'static1'),
            os.path.join(BASE_DIR,'static2'),
        ]
# 当static和static1中都有一个a.txt,当在static中查找到之后,就不会再去static1中查找了。

STATIC_URL:访问后端静态资源的接口前缀,默认情况下接口前缀与静态文件名保持一致

它的作用类似一个令牌,当想要访问静态网页资源,必须在这里写上一个‘/static/‘,当识别到link中的href路径(<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap. min. css">)或script的src路径(<script src="/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>)以static开头,django会允许你去STATICFILES_DIRS列表中存在的所有文件夹下,查找所需要的资源。

当路径的前缀改为XXX,那接口的前缀也需要改为XXX。

因此,这里的static对应的是以static开头的路径。

静态资源动态绑定

前面的静态资源接口,一旦发生改变,就需要去修改html中的导入css和js的前缀路径,这样会很麻烦,当html较多时,需要耗费大量的时间去修改,因此产生了一个动态绑定的方法:

{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.min.css' %}">
<script src="{% static 'bootstrap-3.3.7-dist/js/bootstrap.min.js' %}"></script>
 

当静态资源接口修改后,css和js的路径也会随之改变。

post请求需要修改配置文件

在提交post请求的时候,需要先去配置文件中注释掉一行:

# 中间件
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',
]

form表单回顾

form表单默认是以get请求提交数据,所提交的数据跟在url后面以?xxx=yyy&zzz=ttt的形式存在。

http://127.0.0.1:8000/login/?username=admin&password=123

获取请求方式(request.method

为了减少代码的层级:一般情况下视图函数处理get请求较多所以可以直接再函数体内先写get请求对应的逻辑,将其他请求利用 request. method做出区分

def login(request):
    if request.method == 'POST':
           username = request.POST.get('username')
        password = request.POST.get('password')
        return httpresponse('收到了')
return render(request,'login. html')

request对象方法

request.method:获取请求方式,返回GET/POST

request.POST:获取符合POST请求携带的数据,返回的是一个大字典。(<QueryDict: {‘username‘: [‘admin‘], ‘password‘: [‘123‘]}>

  • request.Post.get(‘key‘):只会取列表最后一个元素
  • request.POST.getlist(‘key‘):取出整个列表

request.GET:获取符合get请求携带数据格式的数据(url?xxx=xxx&ooo=lll

  • request.GET.get(‘key‘) : 只会取列表最后一个元素
  • request.GET.getlist(‘key‘) :取出整个列表

djangoMySQL连接★

1.先去配置文件(settings.py)中配置相关参数

# 修改数据库的配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 数据库类别
        'NAME': 'day49',  # 库的名字
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': '123',
        'CHARSET': 'utf8'
    }
}

2.在项目名或者应用名下面的__init__文件中,指定使用pymysql替代mysqldb连接mysql

import pymysql

pymysql.install_as_MySQLdb()

django orm简介

django orm不能做到创建库,只可以创建表

# orm对象关系映射:
类   ------> 表
对象  ------> 记录
属性  ------> 字段值

orm可以使我们使用python面向对象的语法(句点符)来简单快捷的操作数据

首先需要先去对应的应用下的models.py中书写模型类(模型表)

# 示例:
class User(models.Model):
    # int类型 primary key主键 auto_increment自增长
    id = models.AutoField(primary_key=True)
    # varchar(32)类型的字段,限制展示长度为32
    name = models.CharField(max_length=32)
    # int类型的字段
    password = models.IntegerField()
    # 其实创建的还是varchar类型
    email = models.EmailField(default='[email protected]')
    # hobby字段可以为空
    hobby = models.CharField(null=True,max_length=32)

之后需要执行数据库迁移命令:

*************************数据库迁移(同步)命令************************
python3 manage.py makemigrations  # 仅仅是将你对数据库的改动记录到某个小本本上(migrations文件夹)
python3 manage.py migrate  # 将改动真正的同步到数据库中

***********只要你动了models.py跟数据库相关的代码 你就必须要重新执行上面的两条命令来保证数据库与models.py一致***********

字段的增删改查

字段的增

直接在models.py文件中的模型表新增字段,再执行数据库迁移命令即可

  • 给该字段设置默认值

    • models.EmailField(default=‘[email protected]‘)
  • 运行该字段可以为空
    • models.EmailField(null=True)

字段的查

....

字段的改

直接修改models.py文件中的代码后,执行数据库迁移命令即可

字段的删

只要注释掉对应的字段,再执行数据库迁移命令就会将对应的字段及数据信息全部删除(慎用)

数据的增删改查

1、查询单条数据

from app01 import models   # 先导入models模型表
models.类名.objects.filter(字段名='字段值')
res = models.User.objects.filter(username='jason')  # select * from user where username='jason'
# 返回的结果是一个列表  支持索引取值但是不支持负数并且不推荐使用 推荐你使用它给你封装好的方法
user_obj = res.first()  # 取上面返回的列表中的第一个值
# filter方法条件不存在的时候 不会报错返回的是一个空列表

"""
filter括号内直接放多个关键字参数 并且多个关键字参数之间是and关系
res = models.User.objects.filter(username='jason',password='123')
# 类似执行select * from user where username='jason' and password='123';
"""

2、查询所有的数据

  • filter() 括号内不写拿所有
  • all() 查询所有数据

查询数据,返回的是一个类似列表套字典的数据

<QuerySet [<User: jason>, <User: egon>, <User: sean>, <User: admin>, <User: 你不行>]>

1、create()

user_obj = models.User.objects.create(**kwargs)

user_obj = models.User.objects.create(name=username,password=password)
print(user_obj,user_obj.name)

# 该方法有返回值,返回值就是当前被创建的对象本身

2、对象的绑定方法

# 先生成一个User对象
user_obj = models.User(name=username, password=password)

# 调用对象的绑定方法
user_obj.save()

models.User.objects.filter(id=delete_id).delete()

# 将filter过滤出来的数据全部删除,类似批量删除

1、方式一(推荐)

models.User.objects.filter(id=edit_id).update(name=username, password=password)

2、方式二(了解,不推荐)

通过对对象进行赋值和对象的绑定方法

# 先获取数据对象
edit_obj = models.User.objects.filter(id=edit_id).first()

# 再修改对象属性
edit_obj.name = username
edit_obj.password = password

# 调用对象的绑定方法保存
edit_obj.save()

# 该方法会将所有的字段的数据重新修改,并不是针对某个字段进行修改,不推荐。

原文地址:https://www.cnblogs.com/cnhyk/p/12168159.html

时间: 2024-08-29 16:21:07

第二篇:Django自定义登录功能的相关文章

第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现,回填数据以及错误提示html

第三百八十五节,Django+Xadmin打造上线标准的在线教育平台-登录功能实现 1,配置登录路由 from django.conf.urls import url, include # 导入django自在的include逻辑 from django.contrib import admin from django.views.generic import TemplateView # 导入django自带的TemplateView逻辑 import xadmin # 导入xadmin fr

Django打造在线教育平台_day_4: 完成用户登录功能

1.把功能写在users/views.py文件中 from django.shortcuts import render from django.contrib.auth import authenticate, login #倒入验证输入是否合法模块和登录模块 # Create your views here. def user_login(request): if request.method == 'POST': user_name = request.POST.get('username

Django框架之第二篇

Django框架之第二篇 一.知识点回顾 1.MTV模型 model:模型,和数据库相关的 template:模板,存放html文件,模板语法(目的是将变量如何巧妙的嵌入到HTML页面中). views:视图函数 另加urls:url路径与视图函数的映射关系,,可以不是一一对应的. 2.相关的一些命令 创建一个Django项目:django-admin  startproject  projectname 创建一个项目下的应用:python3  manage.py  startapp  appn

Django流程-以登录功能为例

Django流程-以登录功能为例 一.注意点 1.新创建的app一定要先去settings.py注册 简写:'app01' 完整:'app01.apps.App01Config' 2.启动Django项目的时候,一定要确保一个端口号只有一个Django项目占用,不然的话,会容易造成bug(修改代码后刷新页面没有效果) 3.用户可以访问的资源,都在url中,只有url中开设相关的资源你才能访问到 4.后端资源一般都需要手动指定是否需要暴露给用户 5.Django是默认支持自动重启代码吗的,所以你只

构建NetCore应用框架之实战篇(四):BitAdminCore框架1.0登录功能细化及技术选型

本篇承接上篇内容,如果你不小心点击进来,建议从第一篇开始完整阅读,文章内容继承性连贯性. 构建NetCore应用框架之实战篇系列 一.BitAdminCore框架1.0版本 1.1.0版本是指最小版本,它具备框架所有的必要功能,功能前篇已经介绍. 2.与文章相匹配,我会在GitHub上建立一个项目,以分支的形式保存每篇文章所处阶段的源码.进入GitHub 二.登录功能 1.策划我们需要的功能,按照软件的基本原则是很能用,再扩展. 2.登录功能最基本的是账号.密码.验证码登录. 3.登录后进入首页

Django之模型层第二篇:多表操作

Django之模型层第二篇:多表操作 一 表关系回顾 ? 在讲解MySQL时,我们提到,把应用程序的所有数据都放在一张表里是极不合理的. ? 比如我们开发一个员工管理系统,在数据库里只创建一张员工信息表,该表有四个字段:工号.姓名.部门名.部门职能描述,此时若公司有1万名员工,但只有3个部门,因为每一名员工后都需要跟着部门信息(部门名.部门职能),所以将会导致部门信息出现大量重复.浪费空间. ? 解决方法就是将数据存放于不同的表中,然后基于foreign key建立表之间的关联关系. ? 细说的

第二篇 SQL Server安全验证

本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的第一步.SQL Server支持两种验证:Windows身份验证和SQL Server身份验证.你使用的方式依赖于网络环境,将访问数据库的应用程序类型,以及这些应用程序的用户类型.Windows身份验证:这种形式的身份验证依赖于Windows来做验证身份.访问SQL Server对象的权限被分配给W

第二篇 SQL Server代理作业步骤和子系统

本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作).每个作业步骤运行于一个单独的安全上下文,尽管每个作业有一个所有者来决定谁可以修改作业.本篇主要关注组成SQL Server代理的作业步骤和子系统.快速回顾作业理解SQL Server代理作业的最佳方式是把相关联的 需要完成给定任务 的组件放在一个容器中.作业最主要的组件有作业步骤.计划.警告和通知.

升级IOS8游戏上传自定义头像功能失效的问题

为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VIP之后就可使用了上传自定义功能的特权,我们的游戏就"复制"了该功能.   具体实现就是点击游戏内换自定义头像的按钮后,调用不同平台相应的方法,获取用户选择的图片数据,然后将图片裁剪再传给后台保存至特定的目录下.   测试设备是ipad air2,系统版本IOS 8.0.1,点击游戏内的按钮