Django案例

1.案例说明
  1. 实现登录注册功能
  2. 注册:用户输入账号密码后 - 提交服务器 - 将账号密码保存到数据库中 - 重定向到登录页面
  3. 登录:用户输入账号密码 - 服务器进行判断是否存在 - 存在跳转到主页面 - 不存在跳转到注册页面
  4. 主页面:对数据进行增删改查操作

2. 准备工作

  1. 创建Django项目django-admin startproject 项目名
  2. 创建子应用python manage.py startapp 子应用名
  3. 配置setting
  4. 安装数据库
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>
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值