django入门 - 图1

模型类

  1. 配置项目INSTALLED_APPS

新建的应用需要在settings文件中注册,即在INSTALLED_APPS中添加应用的Config类。

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'app.apps.AppConfig', # 新增app应用的Config类
  9. ]
  1. 模型定义

django模型都继承django.db.models类,一个类Moment相当于数据库表,类属性content相当于表中字段。

  1. from __future__ import unicode_literals # 将模块中显式出现的所有字符串转为unicode类型
  2. from django.db import models
  3. # 新增元组用于设置消息类型枚举项
  4. KIND_CHOICES = (
  5. ('python技术', 'python技术'),
  6. ('数据库技术', '数据库技术'),
  7. ('个人心情', '个人心情'),
  8. )
  9. # Create your models here.
  10. class Moment(models.Model):
  11. content = models.CharField("请输入内容", max_length=200)
  12. # 为user_name、kind增加默认值,为kind增加消息枚举项
  13. user_name = models.CharField("用户名", max_length=20, default='匿名')
  14. kind = models.CharField("选择类型", max_length=20, choices=KIND_CHOICES, default=KIND_CHOICES[0])
  15. class Meta:
  16. # 指明单数(复数)形式的对象名称,展示于djando后台
  17. verbose_name = "记录片刻"
  18. verbose_name_plural = "记录片刻"
  1. 生成数据迁移文件

    1. 定义完成模型,需要生成对应的数据迁移文件,命令:python manage.py makemigrations
  2. 迁移到数据库

    1. 迁移数据文件到数据库,命令:python manage.py migrate

视图类

  1. 基本视图
    1. 定义了模型数据,需要视图处理页面逻辑,建立路由响应函数;

下面代码定义了welcome函数,返回一条被HttpResponse()函数封装的页面信息

  1. import os
  2. from django.shortcuts import render
  3. from django.http import HttpResponse
  4. # Create your tests here.
  5. def welcome(request):
  6. return HttpResponse("<h1>Welcome to my site</h1>")
  1. 表单类
    1. 新建forms.py文件,引入django.forms.ModelForm类
    2. 定义子类Meta,用于声明与本表单关联的模型及其字段 ```python from django.forms import ModelForm from .models import Moment

class MomentFrom(ModelForm): class Meta: model = Moment fields = “all

  1. 3. 表单视图
  2. 1. 常见视图中有表单视图,使表单类和页面模板关联,提供用户输入表单等内容的处理逻辑(保存到数据库中)
  3. 1. 代码新增moments_input函数,定义了普通访问和post提交表单的处理逻辑,普通访问则返回moments_input.html的渲染,post提交则保存再重定向到first_url页面
  4. 1. 普通访问render需要传入三个参数:request默认必传参数,页面模板文件路径,form作为参数传入模板,才能访问到MomentFrom实例。
  5. ```python
  6. import os
  7. from django.shortcuts import render
  8. from django.http import HttpResponse
  9. from django.http import HttpResponseRedirect
  10. from django.urls import reverse
  11. from .forms import MomentFrom
  12. def moments_input(request):
  13. if request.method == 'POST':
  14. form = MomentFrom(request.POST)
  15. if form.is_valid():
  16. moment = form.save()
  17. moment.save()
  18. return HttpResponseRedirect(reverse('first_url'))
  19. else:
  20. form = MomentFrom()
  21. PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  22. return render(request, os.path.join(PROJECT_ROOT, 'app/templates', 'moments_input.html'), {'form': form})

页面模板

  1. 页面模板文件

    1. 模板文件以html格式为基本结构,是前端页面的展示。

      1. <!DOCTYPE html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <title>消息录入页面</title>
      6. </head>
      7. <body>
      8. <form action="?" method="post">
      9. <fieldset>
      10. <legend>请输入并提交</legend>
      11. {{form.as_p}}
      12. <input type="submit" value="submit" />
      13. </fieldset>
      14. </form>
      15. </body>
      16. </html>

      路由映射

  2. 主路由

    1. 项目目录下urls.py文件下,增加对应用app中路由的引用,通过django.con.urls 引入include(),通过include()函数将两个urlpatterns关联。 ```python from django.contrib import admin from django.urls import path from django.conf.urls import url, include

urlpatterns = [ path(‘admin/‘, admin.site.urls), url(r’^app’, include(‘app.urls’)), # 新增app一级路由 ]

  1. 2. 应用路由
  2. 1. 在应用目录下新建urls.py文件,管理app所有url映射。
  3. 1. url(regex, view, kwargs, name)
  4. 1. 其中regex表示用正则表达式表达url路由
  5. 1. view表示路由映射到的视图中的对应函数
  6. 1. name表示该映射的命名
  7. ```python
  8. from django.conf.urls import url
  9. from . import views
  10. from django.views.decorators.csrf import csrf_exempt
  11. urlpatterns = [
  12. url(r'^$', views.welcome, name='first_url'),
  13. url(r'moments_input', csrf_exempt(views.moments_input)),
  14. ]