Django学习总结(Week01)

做一个简单的学生管理系统来总结这一周学到的知识

1.项目初始化

python manage.py startapp App  --  在项目中新建一个应用App

进入项目的settings.py中注册应用:

若在pycharm中创建项目会自动生成templates文件夹,若使用控制台创建则要手动创建。

配置要连接的数据库:

语言与时区配置:

创建静态资源文件夹static, 并注册:

static文件夹中会放置各种静态资源,如图片,字体,mp3等等

连接数据库:

 因为使用的是pymysql,,需要伪装,在__init__文件中

import pymysql

pymysql.install_as_MySQLdb()

 

然后python manage.py migrate执行迁移(因为models中还没有写任何东西,所以不用生成迁移文件),项目框架大概就这样。

 

2.配置路由

在项目根目录的urls中注册App的路由,并设置为默认路由:

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^', include('App.urls'), name='app'),
]

在App目录下的urls.py中要注册name,与根目录中的name保持一致

app_name = 'app'

urlpatterns = [
    path('index/', views.index, name='index'),
    url(r'^', views.index, name='index'),
]

 

3.创建模型

在models.py中创建模型。在本项目中会有三张表:用户表、学生表、班级表。

用户表(编号、用户名、账号、密码、头像)

学生表(编号、姓名、年龄、班级、照片)

班级(编号、班级名)

class User(models.Model):
    u_name = models.CharField(max_length=16, unique=True)  # 用户名
    u_account = models.CharField(max_length=16, unique=True)  # 用户账号
    u_password = models.CharField(max_length=32)  # 用户密码
    u_head = models.ImageField(upload_to='Image/user/%Y/%m/%d/', default='Image/default.jpg')  # 用户头像


class Grade(models.Model):
    g_name = models.CharField(max_length=16, unique=True)  # 班级名


class Student(models.Model):
    s_name = models.CharField(max_length=16)  # 学生姓名
    s_age = models.IntegerField(default=18)  # 学生年龄
    s_head = models.ImageField(upload_to='Image/student/%Y/%m/%d/', default='Image/default.jpg')  # 学生照片
    s_grade = models.ForeignKey(Grade, on_delete=models.CASCADE)  # 学生班级

 

生成迁移文件:python manage.py makemigrations

执行迁移:python manage.py migrate

M的部分搞定。

 

4.视图函数

app的首页应该是用户登录页面,创建index视图函数,具有注册功能,登录时应该在验证登录后重定向到学生管理页面或登录页面。登录成功会将用户的账号作为session保存,退出登录会删除session

@csrf_exempt
def index(request):
    if request.method == 'GET':  # 请求页面
        return render(request, 'index.html')

    elif request.method == 'POST':
        account = request.POST.get('account')
        password = request.POST.get('password')

        if checkUser(account, password):
            request.session['account'] = account
            return redirect(reverse('app:center'))  # 进入学生管理页面

    messages.error(request, '登录失败!')

    return redirect(reverse('app:index'))  # 登录失败重定向到登录页面


def checkUser(account, password):  # 检索数据库是否有对应用户,存在返回True,不存在返回False
    for user in User.objects.all():
        if user.u_account == account and user.u_account == password:
            return True

    return False

简单做个登录页面

 接着做注册页面

注册功能:

@csrf_exempt
def register(request):
    if request.method == 'GET':
        return render(request, 'register.html')

    elif request.method == 'POST':
        username = request.POST.get('username')
        account = request.POST.get('account')
        password = request.POST.get('password')

        user = User()
        user.u_name = username
        user.u_account = account
        user.u_password = password
        user.save()
        messages.success(request, '注册成功!')

    return redirect(reverse('app:index'))

 登录验证成功后会跳到个人中心,个人中心能显示和设置头像,可以跳转到学生管理界面,可以退出登录:

@cache_page(60)
def center(request):

    account = request.session.get('account')

    if account is None:
        return redirect(reverse('app:index'))

    user = User.objects.get(u_account=account)

    data = {
        'username': user.u_name,
        'headPath': str(user.u_head),
    }

    return render(request, 'center.html', context=data)

cache缓存使用需要在settings中注册:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
        'LOCATION': 'my_cache_table',
        'TIMEOUT': 60 * 5
    },
    'redis_backend': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

 

同时需要在终端上创建缓存表: python manage.py createcachetable my_cache_table

效果图:

 

 

 退出登录实现:

def logout(request):
    response = redirect(reverse('app:index'))

    request.session.flush()

    return response

 

剩余的管理学生功能和设置头像功能只能留到周末去做了。

posted @ 2020-03-26 22:18  友利奈绪  阅读(180)  评论(0)    收藏  举报
Live2D