(1)配置数据库 项目目录/settings.py是一个普通的python模块,每项配置都是一key/value 数据库的配置是以dict的形式存放在这个模块中,key名为:DATABASES DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': 3306, } }
(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)修改密码
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
数据都放在:
那怎样拿到delete请求方法的数据如下:
elif request.method == "DELETE":
data = QueryDict(request.body) ---这样就拿到了
print(request.GET)
print(request.POST)
print(request.body)
print(data)
print("delete")
效果如下图: