个人网站功能包括发表、存储个人文章,保存网络上的图片,展示图片,保存并展示个人视频。以下为网站的登陆注册部分。
上期文章:个人网站开发前相关项目配置
用户登录验证
再网站开发中,用户登录验证的一个简单思路通常是将用户输入的信息与数据库中的信息比对,若一致则通过,反之,验证失败.
在本项目中,也采用这种验证方式。这里要用到数据库,Django默认采用自带的sqlite数据库,在这里无需对数据库做改动,若采用MySQL等其它数据库,需要对配置文件做些改动,这里不再详细描述。
django数据模型
这里可以将数据模型简单地理解为数据表,编写数据模型即设计数据库的表中有哪些内容,数据模型需要在应用中的models.py文件中编写。
下面为一个用户个人信息示例:
class UserProfile(models.Model):
birth = models.DateTimeField(max_length=100,blank=True)
phone = models.CharField(max_length=20)
def __str__(self):
return 'user {}'.format(self.user.username)
在这个模型中,包含了用户的’phone’,'birth’信息,由此可见,设计一个数据模型就是一个类,这个类继承了models类,在这个类中字段是各个字段类的实例,例如’phone’是字符型,它是字段类’CharField’类的实例,我们可以在类中添加一些属性,例如最大长度 max_length
,是否可以为空blank
等,关于数据模型具体操作会以后再讲解。
当创建好数据模型之后,需要生成数据表并迁移,这两步现在不需要详细了解,再终端中执行下面两条命令。
python manage.py makemigrations
python manage.py migrate
django表单
需要用户填写信息时,会用到表单,通常会采用<input/>
标签,在django中也可以采用这种方式,但django提供了一种表单方式可以让我们方便处理表单数据,这便是form表单。
采用form表单时需要创建一个类,在应用文件中创建一个 forms.py文件。
打开文件,输入以下代码:
class UserProfileForm(forms.ModelForm):
birth= forms.DateTiemField()
phone=forms.CharField()
class Meta:
model = UserProfile
fields=('birth', 'phone',)
可以看出form表单与数据模型相似,表单类继承了forms类,在这个表单中,用户需填写’birth’和‘phone’,同models一样,forms中各个字段也可以设置max_length
等属性。在页面中使用表单时,表单会生成****标签,无需自己编写。
这里有一个Meta类,其中model = UserProfile
声明了表单对应哪个类型。通常我们会将表单的数据保存至数据库。models中字段与forms中的字段一一对应,为了减少重复,在Meta类中声明采用的数据模型,告诉forms需要展示这个数据模型中的字段。有时数据模型中的字段不会完全用到,设置一个fields属性,其值为我们想要展示的字段。
用户登录
用户登录时,需要设计一个用户登录的数据模型,其中包括用户名和登录密码。django内置了包含用户基本信息的数据模型User,其中包括用户名,密码,邮箱等基本信息。这包含了用户登录时用到的基本信息,所以无需再额外设置数据模型了。
下面编写用户登录的表单:
class LoginForm(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
编写用户登录的视图文件,打开views.py:
from django.http import HttpResponse
from django.shortcuts import render
from.forms import LoginForm
from django.contrib.auth import authenticate,login
def Login(request):
if request.method == "POST":
forms = LoginForm(request.POST)
if forms.is_valid():
cd = forms.cleaned_data
user = authenticate(username=cd