(1)配置数据库
项目目录/settings.py是一个普通的python模块,每项配置都是一key/value
数据库的配置是以dict的形式存放在这个模块中,key名为:DATABASES DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'django',
'USER': 'root',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
(2)同步数据:
使用django的命令行工具同步数据库
python manage.py migrate

(python36env) [vagrant@CentOS7 devops]$ python manage.py makemigrations
No changes detected
(python36env) [vagrant@CentOS7 devops]$ python manage.py dbshell  进入数据库查看数据

MariaDB [devops]> show tables;    --可以看到直接进入devops库了

(python36env) [vagrant@CentOS7 devops]$ python manage.py runserver 0.0.0.0:8000

(3)创建用户:

a.使用django shell 创建普通用户:创建users最直接的方法是使用create_user()辅助函数

(python36env) [vagrant@CentOS7 devops]$ python manage.py shell

In [1]: from django.contrib.auth.models import User  导入User类

In [2]: User.objects.create_user("rock","rock@51reboot.com","123456") 创建用户

b.也可通过命令行创建:创建管理员

(python36env) [vagrant@CentOS7 devops]$ python manage.py createsuperuser
Username (leave blank to use 'vagrant'): admin
Email address: admin@51reboot.com
Password:123456

(4)修改密码

Django不会在user模型上存储原始的(明文)密码,而只是一个哈希。因为这个原因,不要尝
试直接操作user的password属性。这也是为什么创建一个user时要使用辅助函数。
(python36env) [vagrant@CentOS7 devops]$ python manage.py dbshell

MariaDB [devops]> show tables;
+----------------------------+
| Tables_in_devops |
+----------------------------+
| auth_user |

MariaDB [devops]> select * from auth_user \G   ---用格式化查看此表

修改密码:

(python36env) [vagrant@CentOS7 devops]$ python manage.py shell  进入django的shell环境

In [1]: from django.contrib.auth.models import User  导入User类

In [2]: User.objects.get(username="rock")  查询用户并保存在一个U用户对象中

In [3]: u = User.objects.get(username="rock")

In [4]: u.set_password("654321")    用户对象的set_password属性

In [5]: u.save  保存

还可通过命令行进行修改。

 二.用户登陆

1.简单应用:

(1)写视图

from django.shortcuts import render
def user_login(request):
return render(request, 'user_login.html')

(2)写模版文件user_login.html:  ---写一简单炫表单

<body>
<ul>
<form method="get" action="#"> ----action为#是本机即当前地址
<li>用户名: <input type="text" name="username"></li>
<li>密码: <input type="password" name="password"></li>
<li>用户名: <input type="submit"></li>
<li>rock 654321</li>
<li>admin 123456</li>
</form>
</ul>
</body>

(3)配置url

from django.conf.urls import include, url
from .views import index, index_template, user_login
urlpatterns = [
url(r'^user_login/', user_login)
]

启动后效果如下:

它有两种请求:get和post

2.get请求:

(1)如下图中输入用户名密码点提交(也可直接在url地址中输入)后会在浏览器url中显示出来提交的数据,直接发给后端

(2)后端拿到数据:

def user_login(request):
print(request.GET) #拿到前端传的数据
return render(request, 'user_login.html')

如下图终端:拿到数据

(3)后端处理:

    #1.获取用户提交过来的用户名
#2.根据用户名从数据库里取此条记录是否存在
#2.1不存在
#2.2存在,则判断密码是否一致,一致则登录成功(注意用户提交过来的密码是明文,而后端能拿到的是密文,而明文与密文没法直接比,需要对用户明文加密转码)
views.py中:
from django.contrib.auth.models import User
from django.contrib.auth import login,logout,authenticate
def user_login(request):
print(request.GET) #拿到前端传的数据
#1.获取提交过来的用户名
username = request.GET.get("username")
password = request.GET.get("password")
#验证用户密码
user_obj = authenticate(username=username, password=password)
if user_obj:
login(request, user_obj) #验证成功则登录
print("登录成功")
else:
print("登录失败")
return render(request, 'user_login.html')
 

效果如下图:登录成功后

上图中可看到有一sessionid,和如下数据库中django_session表中session-key一样,即我们就是根据用户的cookie,cookie中存放了sessionid,sessionid就是django_session表中的key,然后session_data就可以反转成我们用户的数据/用户对象

(python36env) [vagrant@CentOS7 devops]$ python manage.py dbshell
MariaDB [devops]> show tables;
MariaDB [devops]> select * from django_session \G
*************************** 1. row ***************************
session_key: e59z6132h583m2ci097wovnt5srws4r2
session_data: NjkxMDkyYWFlMmU2ZWQ2NWEyOWZkNTRjZWU3ZTE4ZDQxZGQzZDliNDp7Il9hdXRoX3VzZXJfaWQiOiIyIiwiX2F1dGhfdXNlcl9iYWNrZW5kIjoiZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5kcy5Nb2RlbEJhY2tlbmQiLCJfYXV0aF91c2VyX2hhc2giOiIzYTE2NDhkNTkyYmJlMGMwNTAyOTUwZGVhNWUxNGMzN2E3MzFjMjcwIn0=

3.post请求:

(1)templates/user_login.html修改如下部分:

<body>
<ul>
<form method="post" action="#">
.....

(2)views.py:

为调试,我先把settings.py中csrftoken中间件注释掉

def user_login(request):
if request.method == "GET":
return render(request, 'user_login.html')
elif request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
#验证用户密码
user_obj = authenticate(username=username, password=password)
if user_obj:
login(request, user_obj) #验证成功则登录
print("登录成功")
else:
print("登录失败")
return HttpResponse("")

效果如下图:登录成功后form data它就是querydict的原始数据,即request.POST就等于QueryDict(request.body)

 4.那问题来了,如果是request.methon == "DELETE"方法做用户登录?

(1)templates/user_login.html:修改如下部分

<ul>
<form method="DELETE" action="#">
......

(2)views.py:

def user_login(request):
if request.method == "GET":
return render(request, 'user_login.html')
elif request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
#验证用户密码
user_obj = authenticate(username=username, password=password)
if user_obj:
login(request, user_obj) #验证成功则登录
print("登录成功")
else:
print("登录失败")
elif request.method == "DELETE":
print(request.GET)
print(request.POST)
print("delete") return HttpResponse("")

模拟delete请求如下:如下图中delete请求过来了(get,post请求没有)那数据中哪里呢?

(python36env) [vagrant@CentOS7 devops]$ curl -XDELETE http://127.0.0.1:8000/dashboard/user_login/  -d username=rock -d password=123456

数据都放在:

HttpRequest.scheme  协议
HttpRequest.body  除了get它的所有数据是放在(head头外),其它的所有请求方法数据均放body体中
HttpRequest.path
HttpRequest.method
HttpRequest.encoding
HttpRequest.GET
HttpRequest.POST
HttpRequest.META 

那怎样拿到delete请求方法的数据如下:

elif request.method == "DELETE":
data = QueryDict(request.body) ---这样就拿到了
print(request.GET)
print(request.POST)
print(request.body)
print(data)
print("delete")

效果如下图:

五.数据库同步,创建django用户,用户登陆过程的更多相关文章

  1. 在mysql数据库中创建oracle scott用户的四个表及插入初始化数据

    在mysql数据库中创建oracle scott用户的四个表及插入初始化数据 /* 功能:创建 scott 数据库中的 dept 表 */ create table dept( deptno int ...

  2. 0004 继承django系统用户表

    1 创建基础模型 在本项目中,所有表都有两个自动产生的完全相同的字段,即创建时间和更新时间,因此,可以创建一个基础模型,让所有的表都来继承这个模型. 找到工程目录下的PublicMethod目录,创建 ...

  3. Redis & Python/Django 简单用户登陆

    一.Redis key相关操作: 1.del key [key..] 删除一个或多个key,如果不存在则忽略 2.keys pattern keys模式匹配,符合glob风格通配符,glob风格的通配 ...

  4. mysql 创建数据库,添加用户,用户授权

    一.创建mysql数据库 1.创建数据库语法 --创建名称为"testdb"数据库,并设定编码集为utf8 CREATE DATABASE IF NOT EXISTS testdb ...

  5. 数据库迁移到Azure SQL Database用户无法登陆的问题

    业务情景:数据库是运维迁移上去的,好像使用了一个工具叫做Microsoft Data Migration Assistant,迁移之后,我的web应用无法连接数据库. 迁移之后的数据库内有User,但 ...

  6. 运维开发笔记整理-创建django用户

    运维开发笔记整理-创建django用户 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.创建普通用户 C:\Users\yinzhengjie\softwares\Pycharm ...

  7. aud$定位错误用户密码登陆数据库的具体信息

    环境:Oracle 11.2.0.3 客户端使用错误的用户密码登陆数据库 查询最近1天由于密码错误登陆失败的信息 查询当前审计中有哪些returncode值 1. 客户端使用错误的用户密码登陆数据库 ...

  8. Oracle数据库之创建表空间与用户

    Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...

  9. Python Django CMDB项目实战之-2创建APP、建模(models.py)、数据库同步、高级URL、前端页面展示数据库中数据

    基于之前的项目代码来编写 Python Django CMDB项目实战之-1如何开启一个Django-并设置base页index页文章页面 现在我们修改一个文章列表是从数据库中获取数据, 下面我们就需 ...

随机推荐

  1. Java实现蓝桥杯第八届决赛 对局匹配

    标题:对局匹配 小明喜欢在一个围棋网站上找别人在线对弈.这个网站上所有注册用户都有一个积分,代表他的围棋水平. 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起.如果两 ...

  2. Java实现 LeetCode 703 数据流中的第K大元素(先序队列)

    703. 数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组n ...

  3. Java实现 LeetCode 101 对称二叉树

    101. 对称二叉树 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / \ 2 2 / \ / \ 3 4 4 3 但是下面这个 [1,2,2 ...

  4. java实现第六届蓝桥杯打印菱形

    打印菱形 给出菱形的边长,在控制台上打印出一个菱形来. 为了便于比对空格,我们把空格用句点代替. 当边长为8时,菱形为: .......* ......*.* .....*...* ....*.... ...

  5. react 性能优化注意事项

    工具: React 16 或更新版本   只需在url 后边加  ?react_perf 后 performance 一栏中会添加 User Timing devtool 分析 state.props ...

  6. 【asp.net core 系列】6 实战之 一个项目的完整结构

    0. 前言 在<asp.net core 系列>之前的几篇文章中,我们简单了解了路由.控制器以及视图的关系以及静态资源的引入,让我们对于asp.net core mvc项目有了基本的认识. ...

  7. TD课程通的最终版评价

    相较之前的软件,功能得到了完善,同时也修复了BUG,还增加了辅助工具,可以查询一周的占用情况,省空间,很方便. 添加课程表的功能也得到了完善,同时增加了链接到教务系统的功能,方便查询相关的课程.问题是 ...

  8. MyBatis运行流程及入门第一个程序

    1. mybatis是什么? MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并 ...

  9. 高效开发(James)

    1.对自己的要求 定位自己Level,清晰自己的目标. 学一个点,明确自己通过学习,需要达到的程度 怎么学一门技术 比如: Spring Cloud 它为什么出现? 它解决了什么问题? 它是怎么解决的 ...

  10. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(六)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...