Django笔记(2)

实现通过表单提交数据到数据库,模拟账号注册和登录

项目结构:

1:在templates/polls目录下创建登陆页面的html文件,这里的文件名为:login.html,内容为:
 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>
<h1>表单提交测试</h1>

<form method="post" action="{% url 'polls:loginsuccess' %}">
    {% csrf_token %}
    <input type="text" name="username" placeholder="用户名"/><br>
    <input type="password" name="password" placeholder="密码"><br>
    <input type="submit" value="注册/登录">
</form>

</body>
</html>

2:在views.py文件中创建函数用于返回这个页面:
 

def crt_login(request):
    return render(request, 'polls/login.html')

3:在polls/urls.py文件中写入路径:

app_name = 'polls'
urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    # ex: /polls/5/
    path('download/<int:pk>/', views.DetailView.as_view(), name='detail'),
    # ex: /polls/5/results/
    path('<int:pk>/results/', views.ResultsView.as_view(), name='results'),
    # ex: /polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),
    # script 1
    path('script/', views.script, name='script'),
    # crt user page
    path('login/', views.crt_login, name='login'),
    # login success page
    path('success/', views.login_test, name='loginsuccess')
]

4:在主页面生成链接:

<a href="{% url 'polls:login' %}">take me to the login page</a>

到这里就完成了登陆页面的创建,如图所示:

 

 5:创建登陆账号成功时候跳转的网页:

文件名为loginsuccess.html,第一步中的action内即为它的链接,路径的添加如第三步最后一行所示:
内容为:
 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login success</title>
</head>
<body>
<h1 style="color:cyan">{{ name }}登录成功</h1>
</body>
</html>

6:创建处理数据的函数:

在这一步之前需要在数据库中创建相应的表:

在models.py文件中输入:

class UserData(models.Model):
    nid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=32,)

    def __str__(self):
        return self.name

然后在manage.py同级目录下执行

python manage.py makemigrations
python manage.py migrate

将数据改动迁移到数据库中,

在views.py文件内写入函数:
 

def login_test(request):
    print('注册中')
    # 获取页面传输来的数据
    name = request.POST.get('username')
    password = request.POST.get('password')
    print('用户名:', name, '密码:', password,)
    # 获取当前数据库中的账号信息
    curr_data = UserData.objects.all()
    user_data_dict = {}
    # 将数据库中的信息整理进入字典方便查找对比
    for user in curr_data:
        user_data_dict[f'{user.name}'] = user.password
    # 如果name已经存在,根据密码是否正确来决定返回数据
    if name in user_data_dict.keys():
        if password != user_data_dict[f'{name}']:
            pass
            return HttpResponse('密码错误请重新输入密码')
        else:
            return render(request, 'polls/loginsuccess.html', {'name': name})
    # name不存在,创建新的账号
    else:
        db_data = UserData(name=name, password=password)
        db_data.save()
        return HttpResponse(f'{name}账号注册成功')

完成结果如图所示:

数据库:

 密码错误:

登录成功:

 注册成功:

 数据库改动

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值