今天学习Django中在网页创建账户,并将其保存到数据库里,以及创建超级用户(即管理员账户)来管理网页和账户。
说到账户,就不得不说一个人人皆知的东西——密码。
密码的破译和编制一直以来都是人们专研不停的学问,由此诞生的学问便称为密码学。
在21世纪初,由于各大网站在数据库里保存用户的信息几乎都是明文显示,导致了大部分网站受到攻击后用户的信息受到了严重的泄露,为了防止这一举措,现在的大部分服务器在存储用户密码时都会使用加密的方式,如md5等,主要算法采用的是哈希算法(hash)。
而Django之中,它囊括了这种信息安全的概念,会特别提示你某些账户密码上的问题,甚至是为了防止跨站攻击而让你不得不采用{% csrf_token %} 语句。
也就是说,Django考虑到了网页开发中某些新手因为经验不足而产生的安全问题并予以提示。
首先,我们需要创建一个网页模板供用户输入信息并连接到我们的数据库予以保存。
模板大致如下:
<form action="/user/register/" method="POST">
<!-- 引入 csrf token -->
{% csrf_token %}
<div>请输入用户名密码
<br>
用户名:<input type="text" name="username" />
<br>
密码:<input type="password" name="password" />
<br>
年龄:<input type="text" name="age" />
</div>
<hr>
请输入正文<br>
<textarea name="description">这是一大段文本</textarea>
<hr>
<span>
性别为:
<input type="radio" name="sex" value="male" checked />Male
<input type="radio" name="sex" value="female" />Female
</span>
<hr>
请选择城市
<select name="city">
<option value="beijing">北京</option>
<option value="shanghai">上海</option>
<option value="guangzhou">广州</option>
<option value="shenzhen">深圳</option>
</select>
<!-- 提交数据 -->
<input type="submit" value="确认" />
我们可以看到在第一行中有这样一句: method=“POST”,这代表的是提交的HTTP Method,其余的还有GET/PUT/DELETE等。
在最后一行中,如果type=”submit”为input或者button的标签则用来执行提交动作。
而如果type=“password”,则会在文本框中以星号显示。
value后面的值则是真正传往后台的数据。
完成网页模板之后,我们需要按照昨天的方式在models中建立数据模型
username = models.CharField(max_length=16, unique=True)
password = models.CharField(max_length=16)
sex = models.CharField(max_length=8, choices=SEX)
age = models.IntegerField(default=18)
description = models.TextField()
city = models.CharField(max_length=8),
并将数据表格初始化。
然后我们需要在views中添加以下语句:
def register(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
description = request.POST['description']
sex = request.POST['sex']
city = request.POST['city']
age = int(request.POST['age'])
person = Person.objects.create(
username=username,
password=password,
description=description,
sex=sex,
city=city,
age=age
)
return redirect("/user/info/?uid=%s" % person.id) # 重定向到用户信息页
else:
return render(request, 'test.html')
def user_info(request):
uid = int(request.GET['uid'])
person = Person.objects.get(id=uid)
return render(request, 'show.html', {'person': person})
可以看出,request.post和request.get都是字典。
这样就可以把数据保存到数据库中了。
那么,怎么创建管理账户呢?
django专门提供了可以管理后台的界面。
首先,我们需要建立一个登录管理账户的用户:
python manage.py createsuperuser
键入你想要使用的用户名,然后按下回车键:
Username: admin
然后提示你输入想要使用的邮件地址:
Email address: [email protected]
最后⼀步是输入密码。你会被要求输入两次密码,第⼆次的目的是为了确认第⼀次输入的确实是你想要的密码。
Password: ********** Password (again): ********* Superuser created successfully.
打开app/admin.py文件,将需要管理的model注册:
from django.contrib import admin
from myapp.models import Article
admin.site.register(Article)
然后在浏览器中打开 http://127.0.0.0:8000/admin/即可,下面的就知道了。