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
剩余的管理学生功能和设置头像功能只能留到周末去做了。

浙公网安备 33010602011771号