实现登录注册
以登录为例,要想实现登录: 让用户访问到登录界面、连接到数据库上
访问登录界面
登录界面通常会包含: html文件、css文件、js文件、image文件,这些东西通常称之为静态资源
静态资源放哪?
创建静态资源的目录
点击项目名 ,右键 , new , directory
创建两个: 一个叫static(通用的名字,也可以自己起),另一个叫templates (用开发工具创建会默认带有)
那么这两个目录作为静态资源文件使用的话,需要配置
配置静态资源
第一个: 配置templates(这个文件夹里放的是html文件) ,默认都是配置好的
第二个: 配置static,这个文件夹放的是css、js、image等文件
验证静态资源可访问
运行项目,运行成功,在浏览器里访问:如下 http://127.0.0.1:8000/static/image/1.jpg
但是templates文件下的资源不可访问,这是对的,那么怎么访问html文件?
访问login.html文件
定义内部的指向
在app 下面的views.py里编写代码:
def login(request):
if request.method == 'GET':
return render(request,'login.html')
这个函数被get请求访问会指向login.html
定义外部访问和关联
在urls.py文件中添加外部访问路径和对views的指向
from app import views
urlpatterns = [
path(‘admin/’, admin.site.urls),
path(‘login/’,views.login),
]
login/ 就是浏览器访问路径
views.login指向的是views的函数
访问验证
在浏览器上 http://127.0.0.1:8000/login 可以访问到登录界面
实现登录
先连接数据库
创建对应的用户表
django可以手动创建表,然后映射以下,也可以通过模型自动创建表,我们选择第二种方式
创建模型
在app下面的models.py 文件中 创建
class Users(models.Model): username = models.CharField('用户名',max_length=20,unique=True,null=False) password = models.CharField(max_length=16,null=False) email = models.CharField(max_length=30,null=False) dingyue = models.BooleanField(max_length=8,default=True) token = models.CharField(max_length=100)
class Meta: # 指定表名 db_table='users' pass
每一个属性就是表的列,后面的约束条件,默认max_length必须有,默认都是非空,也就是null可以不写
自定映射生成表
在生成表之前,需要下载pymysql或者下载mysqlclient
下载pymysql,需要在(最好是在和项目名一样的文件夹下那个)init.py文件中添加以下代码
import pymysql
pymysql.install_as_MySQLdb()
然后开始在teminal 中使用命令生成表
第一个命令 python manage.py makemigrations
回车,第二个命令 python manag.py migrate
然后在数据库中就可以看到users表
判断登录是否成功
在views.py的login函数中,
def login(request):
if request.method == 'GET':
return render(request,'login.html')
else:
#接收用户名和密码
username=request.POST.get("nickname")
password=request.POST.get("password")
print(username+"*****"+password)
# 验证用户名是否存在,密码是否正确
try:
users=Users.objects.get(username=username)
if users.password == password:
return render(request,'index.html')
else:
return render(request, 'login.html',{'response':'用户名或者密码错误'})
except:
return render(request,'login.html',{'response':'用户名或者密码错误'})
最后展示以下前端的html代码,其他的后续再上传
<h3>登录</h3>
<p>已有账号,直接登录。</p>
<form method="post" action="/login/">
{% csrf_token %}
<div>
<span>用户名<label>*</label></span>
<input type="text" name="nickname">
</div>
<div>
<span>密码<label>*</label></span>
<input type="password" name="password">
</div>
<a class="forgot" href="#">忘记密码?</a>
<input type="submit" value="立即登陆">
<span style="color: red;font-size: 20px">{{ response }}</span>
</form>