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
    评论
1. Blog 一个基于 Django 的博客系统,使用 Django 内置的用户认证系统,提供了博客文章的创建、更新、删除、评论等功能,同时支持 markdown 格式的文章写作。 2. Online Shop 一个基于 Django 的在线商店系统,实现了商品分类、商品展示、购物车、订单管理等功能,使用 Django 集成的支付宝 SDK 实现了在线支付。 3. Social Network 一个基于 Django 的社交网络系统,用户可以注册、登录、创建个人资料、添加好友、发布动态、评论等,使用 Django 内置的消息系统实现私信功能。 4. Todo List 一个基于 Django 的任务清单应用,用户可以创建、查看、修改、删除任务,使用 Django 内置的时间日期模块和 Bootstrap 实现了任务的时间戳和样式美化。 5. Online Course 一个基于 Django 的在线课程平台,提供了课程分类、课程展示、购买课程、学习进度等功能,使用 Django 集成的视频播放器实现了在线学习。 6. Weather App 一个基于 Django 的天气预报应用,使用第三方 API 获取天气数据,用户可以通过输入城市名称获取当地天气情况,使用 Django 内置的缓存系统缓存天气数据,节省了 API 请求次数。 7. Recipe Book 一个基于 Django 的食谱分享应用,用户可以创建、查看、修改、删除食谱,使用 Django 内置的搜索模块实现了关键词搜索功能。 8. Music Player 一个基于 Django 的音乐播放器应用,用户可以上传音乐文件,创建歌单,播放歌曲,使用 Django 集成的音频播放器实现了在线播放。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值