前言
上篇文章大概介绍了Python和django的一些基本操作,这篇文章将会介绍数据库的一些东西,简单写一个登录注册功能,并与数据库进行交互,注册后可以存入到数据库,登录后可以看到个人信息。
一:登录
首先新建一个login页面,并增加两个输入框和一个提交按钮,一个用于输入用户名,一个用于输入密码,并将密码输入框type改为password,这样将会密文显示,而非明文。
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<div>
<label>用户名:</label><input name="username" type="text">
</div>
<div>
<label>密码:</label> <input name="password" type="password">
</div>
<button type="submit">提交</button>
</form>
</body>
</html>
然后修改view.py文件,用于获取Html传入的数据,这时候我们就可以使用request去获取当前的请求方式,代码可以写成这样
view.py
def login(request):
if request.method == "POST":
# 接受用户名
username = request.POST.get("username")
# 接收密码
password = request.POST.get("password")
# 打印接收的数据
print(username, password)
return render(request, "login.html")
elif request.method == "GET":
return render(request, "login.html")
这里我加了个判断用于判断get请求和post请求,判断显示什么,post收到数据后打印传入数据。
打开浏览器,随机输入几个字母看看,这时你会发现又报错了。这是因为Django对post请求做了限制,很简单,我们只要稍微修改一下代码就可以了
首先在login里加入
{% csrf_token %}
然后在在setting.py注释
重新运行
打印成功,程序完成了。当然这样并不能存储数据,刷新一下就没有了,怎么能保存呢?先看一下保存在当前页面
我们先修改view.py里的代码,先新建一个数组(列表)用于临时存储输入的用户名和密码,我这里新建了userList字段用于临时存储输入的用户名和密码,然后将用户名和密码append到列表里(append方法是将数据添加到最后一条),具体代码可以写成这样
view.py
userList=[]
def login(request):
if request.method == "POST":
# 接受用户名
username = request.POST.get("username")
# 接收密码
password = request.POST.get("password")
userList.append({"username":username,password:password})
# 打印接收的数据
print(username, password)
return render(request, "login.html",{"data":userList})
elif request.method == "GET":
return render(request, "login.html")
然后修改login中到代码,增加
login.html
<script type="text/javascript">
var data={{ data|safe }}
console.log(data)
</script>
django和js交互就是用两个{}来交互的,我这里写的比较简单主要就是接受到数据,打印一下数据。
运行代码,可以看到我们数据打印出来,但是好像有点问题,为什么密码的字段也是是bbb呢,原来是我们view.py写错来,这里修改下就好了,我就不发代码了,很简单
我们知道,临时存肯定是不行的,怎么存到数据库呢?这里就要用到models这个类了,首先我们打开这个文件,我们看到这个文件已经帮我们引用了一个models类而这个类也是我们所需要用的
简单点我们先新建一个userinfo类,然后加点代码
models.py
然后打开terminal运行python manage.py makemigrations,这里使用Linux和MacOS的可能会报错,因为Linux和MacOS默认安装了Python2.7,所以会有冲突
这里只需要指定Python版本就可以了,重新运行python3 manage.py makemigrations,出现以下内容则说明运行成功
然后执行python3 manage.py migrate 出现以下内容则说明成功
这时你看结构目录还会发现多出一个文件,这是数据库临时修改文件,打开其实就是sql代码,有兴趣多可以研究下
这里我默认用多是自带多Sqlite,所以就没有配置,如果有用mysql,或者sqlserver的可以自行在settings里配置,看一下sqllite数据库,已经创建完成,并增加了一个demo_userinfo表,这就是我们刚才创建到
既然数据库创建好了,那么该如何使用呢?其实也很简单,我们再次修改view.py文件
view.py
def login(request):
if request.method == "POST":
# 接受用户名
username = request.POST.get("username")
# 接收密码
password = request.POST.get("password")
# 添加到列表
# userList.append({"username":username,password:password})
# 添加到数据
UserInfo.objects.create(usrename=username, password=password)
#获取表中所有数据
userList=UserInfo.objects.all()
# 打印接收的数据
print(userList)
return render(request, "login.html", {"data": userList})
elif request.method == "GET":
return render(request, "login.html")
然后输入用户名和密码,成功后到数据看看是否有数据,如果有结果则表示配置正常
Over
总结:
Python+Django 学习日志二到这里算是结束了,下一节准备考虑写序列化和反序列化,因为上面例子从数据取出数据后在html中打印是会报错到,所以下一节考虑序列化和反序列化 ,文章名称和commit对应,可以自行下载