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

[TOC]css

自定义登陆功能

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

views.py中建立的视图函数,会须要用到一些css样式和js对象,若是仍是经过CDN加速的方式,从网络调用,会显得不安全,当服务器网络发生故障的时候,会致使css样式和js对象加载不出来,所以咱们须要将这些静态文件放到本地存放。html

静态文件

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

静态文件夹(static)

解耦合,方便维护管理。mysql

针对这些静态文件,咱们须要为其建立一个专门的文件夹,这样能够显得不是很杂乱,也能够统一进行管理,通常咱们会命名为static,结构以下:sql

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:访问后端静态资源的接口前缀,默认状况下接口前缀与静态文件名保持一致django

它的做用相似一个令牌,当想要访问静态网页资源,必须在这里写上一个'/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列表中存在的全部文件夹下,查找所须要的资源。bootstrap

当路径的前缀改成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='123@qq.com')
    # 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='123456@com')
  • 运行该字段能够为空
    • models.EmailField(null=True)

字段的查

....

字段的改

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

字段的删

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

数据的增删改查

一、查询单条数据

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';
"""

二、查询全部的数据

  • filter() 括号内不写拿全部
  • all() 查询全部数据

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

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

一、create()

user_obj = models.User.objects.create(**kwargs)
 
user_obj = models.User.objects.create(name=username,password=password)
print(user_obj,user_obj.name)
 
# 该方法有返回值,返回值就是当前被建立的对象自己

二、对象的绑定方法

# 先生成一个User对象
user_obj = models.User(name=username, password=password)
 
# 调用对象的绑定方法
user_obj.save()

models.User.objects.filter(id=delete_id).delete()
 
# 将filter过滤出来的数据所有删除,相似批量删除

一、方式一(推荐)

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

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

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

# 先获取数据对象
edit_obj = models.User.objects.filter(id=edit_id).first()
 
# 再修改对象属性
edit_obj.name = username
edit_obj.password = password
 
# 调用对象的绑定方法保存
edit_obj.save()
 
# 该方法会将全部的字段的数据从新修改,并非针对某个字段进行修改,不推荐。
相关文章
相关标签/搜索