1.案例说明
- 实现登录注册功能
- 注册:用户输入账号密码后 - 提交服务器 - 将账号密码保存到数据库中 - 重定向到登录页面
- 登录:用户输入账号密码 - 服务器进行判断是否存在 - 存在跳转到主页面 - 不存在跳转到注册页面
- 主页面:对数据进行增删改查操作
2. 准备工作
- 创建Django项目
django-admin startproject 项目名
- 创建子应用
python manage.py startapp 子应用名
- 配置setting
- 安装数据库
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'lianxi',
]
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST':'localhost',
'POST':3306,
'USER':'root',
'PASSWORD':'123123',
'NAME':'lianxi',
}
}
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
在同项目名下的文件init.py
# 安装数据库
import pymysql
pymysql.install_as_MySQLdb()
3. 创建表
1) 在models.py创建表
# 用户名表
class Users(models.Model):
user = models.CharField(max_length=20,verbose_name='账号')
pwd = models.CharField(max_length=20,verbose_name='密码')
# 老师信息表
class Teacher(models.Model):
name = models.CharField(max_length=20,verbose_name='姓名')
course = models.CharField(max_length=20,verbose_name='课程')
age = models.IntegerField(verbose_name='年龄')
sex = models.CharField(max_length=20,verbose_name='性别')
class Mate:
verbose_name='Teacher'
verbose_name_pluse = verbose_name
db_table = 'teacher'
2)在admin.py注册表
from django.contrib import admin
from lianxi.models import Teacher,Users
# Register your models here.
admin.site.register(Teacher)
admin.site.register(Users)
3)生成迁移、执行迁移
python manage.py makemigrations
python manage.py migrate
4 注册
1)注册视图
class RegisterView(View):
# 返回注册页面
def get(self,request):
return render(request,'register.html')
# 提交账号密码并保存到数据库
def post(self,request):
# 获取表中账号密码,解析
user1 = request.POST.get('user')
pwd1 = request.POST.get('pwd')
# 保存到数据库中,可能会出现异常,所有要做异常处理
try:
# 新增数据
Users.objects.create(user=user1,pwd=pwd1)
# 失败做的代码
except Exception as e:
return HttpResponse('账号密码注册失败')
# 成功后返回登录页面,重定向
return redirect('/login/')
2)配置路由
主路由路由分发
from django.contrib import admin
from django.urls import path,include # 导入分发
from myapp import urls
urlpatterns = [
path('admin/', admin.site.urls),
# 路由分发
path('',include(urls))
]
在应用里建一个urlspy文件
from django.urls import path,re_path
from myapp import views
urlpatterns = [
path('register/',views.RegisterView.as_view()),
]
3)注册页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>注册页面</h3>
{# action 可以不加,默认到register #}
<form method="post" action="/register/">
账号:<input type="text" name="user">
密码:<input type="password" name="pwd">
<input type="submit" value="注册">
</form>
</body>
</html>
5.登录页面
1)登录视图
class LoginView(View):
# 返回登录页面
def get(self,request):
return render(request,'login.html')
def post(self,request):
user1 = request.POST.get('user')
pwd1 = request.POST.get('pwd')
# 查看数据库是否存在
try:
# 查询用户名与表单中输入的用户名一致的数据
user_data = Users.objects.get(user=user1)
except Exception as e:
print(e)
return HttpResponse('账号不存在')
# 用户存在,判断密码是否一致
if pwd1 == user_data.pwd:
# 重定向到主页面
return redirect('/index/')
else:
return HttpResponse('密码错误')
2)登录路由
from django.urls import path,re_path
from myapp import views
urlpatterns = [
path('login/',views.LoginView.as_view()),
]
3) 登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>登录页面</h3>
{# action 可以不加,默认到register #}
<form method="post" action="/login/">
账号:<input type="text" name="user">
密码:<input type="password" name="pwd">
<input type="submit" value="登录">
</form>
</body>
</html>
6 主页面 (增删改查)
1)主视图
from django.shortcuts import render,redirect
from lianxi.models import Teacher
from django.views import View
from django.http import HttpResponse
# Create your views here.
class ListView(View):
def get(self,request):
teacher = Teacher.objects.all()
conter ={
'tea':teacher
}
return render(request,'list.html',conter)
class DelView(View):
def get(self,request,id):
Teacher.objects.filter(id=id).delete()
return redirect('/list/')
class AddView(View):
def post(self,request):
name = request.POST.get('name')
course = request.POST.get('course')
age = request.POST.get('age')
sex = request.POST.get('sex')
try:
Teacher.objects.create(name=name,course=course,age=age,sex=sex)
except Exception as e:
print(e)
return HttpResponse('添加失败')
return redirect('/list/')
class UpView(View):
def post(self,request):
id = request.POST.get('id')
name = request.POST.get('name')
course = request.POST.get('course')
age = request.POST.get('age')
sex = request.POST.get('sex')
try:
Teacher.objects.filter(id=id).update(
name=name,course=course,age=age,sex=sex
)
except Exception as e:
print(e)
return HttpResponse('修改数据不存在')
return redirect('/list/')
class SearchView(View):
def get(self,request):
id = request.GET.get('id')
try:
tea_data = Teacher.objects.get(id=id)
except Exception as e:
print(e)
return HttpResponse('搜索的数据不存在')
return HttpResponse(f'搜索数据为:编号{tea_data.id}、姓名{tea_data.name}、课程{tea_data.course}、年龄{tea_data.age}、性别:{tea_data.sex}')
2) 路由
from django.contrib import admin
from django.urls import path
from lianxi import views
urlpatterns = [
path('admin/', admin.site.urls),
path('list/',views.ListView.as_view()), # 主页面
path('del/<int:id>/',views.DelView.as_view()), # 删除路由
path('add/',views.AddView.as_view()), # 添加路由
path('update/',views.UpView.as_view()), # 修改路由
path('search/',views.SearchView.as_view())
]
3)主视图
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h3>主页面</h3>
<table width="500px" border="1px">
<tr>
<th>编号</th>
<th>姓名</th>
<th>课程</th>
<th>年龄</th>
<th>性别</th>
<th>操作</th>
</tr>
{% for i in tea %}
<tr>
<th>{{ i.id }}</th>
<th>{{ i.name }}</th>
<th>{{ i.course }}</th>
<th>{{ i.age }}</th>
<th>{{ i.sex }}</th>
<th>
<a href="/del/{{ i.id }}/">删除</a>
</th>
</tr>
{% endfor %}
</table>
<form method="post" action="/add/">
{% csrf_token %}
姓名:<input type="text" name="name">
课程:<input type="text" name="course">
年龄:<input type="text" name="age">
性别:<input type="text" name="sex">
<input type="submit" value="添加">
</form><br/>
<p>修改功能</p>
<form method="post" action="/update/">
{% csrf_token %}
编号:<input type="text" name="id">
姓名:<input type="text" name="name">
课程:<input type="text" name="course"><br/>
年龄:<input type="text" name="age">
性别:<input type="text" name="sex">
<input type="submit" value="修改">
</form><br/>
<p>搜索</p>
<form method="get" action="/search/">
请输入id:<input type="text" name="id">
<input type="submit" value="搜索">
</form>
</body>
</html>