Django学习笔记(一)——创建项目、数据库交互、Admin站点管理

MVC

用一种业务逻辑、数据、界面显示分离的方法组织代码
核心:解耦,实现每个模块的单独存放,易于维护
部分作用
model用于处理应用程序数据逻辑的部分,通过模型对象与数据库相连
view处理数据显示问题,依据model创建
controller用户交互的部分,从model读取数据,控制用户输入并发给view进行显示

MTV

与MVC无本质差别,依旧保持松耦合
部分作用
model负责业务对象与数据库对象(对应model)
template负责如何展示页面给用户(对应view)
view负责业务逻辑,并适当调用model,template(对应controller)
*url分发器将不同的url交付给对应的view处理

Django相关操作

创建项目

进入目标目录
(learn_environment) F:\learn_django>django-admin startproject project
目录层级说明
F:\LEARN_DJANGO
└─project
    │  manage.py
    │
    └─project
            settings.py
            urls.py
            wsgi.py
            __init__.py
manage.py  命令行工具,可以进行多种交互
project
	__init__.py		空文件,作为python包
	settings.py		项目配置文件
	urls.py			url控制器声明
	wsgi.py			项目与wsgi兼容的web入口

基本操作

配置数据库
在settings.py文件中的DATABASE选项配置
#settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}
在__init__.py文件中写入(需要安装pymysql)
#__init__.py
import pymysql
pymysql.install_as_MySQLdb()

创建应用

在一个项目中,可以创建多个应用,每个应用进行一种业务逻辑操作
(learn_environment) F:\learn_django\project>python manage.py startapp  myapp
目录说明
文件名作用
admin.py站点配置
models.py模型
views.py视图
激活应用
在settings.py文件中,将myapp加入INSTALLED_APPS中
# settings.py
# Application definition
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]
数据库交互
定义models.py,与数据库交互,数据库中每一张数据表对应models中一个模型类
# 导入models包,用于models.Model继承
from django.db import models
# Create your models here.
class Grades(models.Model):
    gname = models.CharField(max_length=20)
    gdate = models.DateTimeField()
    ggirlnum = models.IntegerField()
    gboynum = models.IntegerField()
    isDelete = models.BooleanField(default=False)
迁移建表
生成迁移文件
(learn_environment) F:\learn_django\project>python manage.py makemigrations
Migrations for 'myapp':
  myapp\migrations\0001_initial.py
    - Create model Students
执行迁移(在数据库中生成表)
(learn_environment) F:\learn_django\project>python manage.py  migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, myapp, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying myapp.0001_initial... OK
  Applying sessions.0001_initial... OK
测试数据库交互操作
>>> from myapp.models import Grades,Students
>>> from django.utils import timezone
>>> from datatime import *

查询:

>>> Grades.objects.all()
<QuerySet [<Grades: uestc01-3-24>]>
>>> grade1.students_set.all()
<QuerySet [<Students: Students object>, <Students: Students object>]>

添加:创建模型类的对象实力,初始化属性后,调用save()

>>> grade1 = Grades()
>>> grade1.gname = 'uestc01'
>>> grade1.gdata = datetime(year = 2020, month = 5, day=11)
>>> grade1.ggirlnum = 3
>>> grade1.gboynum = 24
>>> grade1.save()

查找:

>>> grade1 = Grades.objects.get(pk=1)
>>> grade1
<Grades: uestc01-3-24>

修改:将对象修改后,调用save()

删除:调用delete(),物理删除,直接删除数据表中记录

外键关联:给对象的外键属性赋值外键对象

启动服务器
此处调用的服务器是以python写的轻量级web服务器,仅适合用于开发和测试
(learn_environment) F:\learn_django\project>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
May 11, 2020 - 16:07:06
Django version 1.11.4, using settings 'project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

Admin站点管理

配置
需要在settings.py文件中的INSTALLED_APPS中添加,一般创建项目时会自动添加。
INSTALLED_APPS = [
    'django.contrib.admin', # admin配置
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]
汉化
需要在settings.py文件中配置
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
管理数据表
需要在myapp/admin.py文件中注册
from django.contrib import admin
from .models import Grades, Students
admin.site.register(Grades)
admin.site.register(Students)
自定义界面
# myapp/admin.py
class GradeAdmin(admin.ModelAdmin):
    # 列表页属性
    # 显示字段
    list_display = ['pk', 'gname', 'gdate', 'ggirlnum', 'gboynum', 'isDelete']
    # 过滤字段
    list_filter = ['gname']
    # 查找字段
    search_fields = ['gname']
    # 分页
    list_per_page = 5

    # 添加、修改页属性
    # 规定属性的先后顺序
    # fields = ['ggirlnum', 'gboynum', 'gname', 'gdate', 'isDelete']
    # 给属性分组
    fieldsets = [
        ('num', {'fields': ['ggirlnum', 'gboynum']}),
        ('base', {'fields': ['gname', 'gdate', 'isDelete']})
    ]
    # 以上两个属性不能同时使用
关联对象自动创建(Inline方法)
class StudentsAutoCreate(admin.TabularInline):
    model = Students
    extra = 1
class GradeAdmin(admin.ModelAdmin):
    inlines = [StudentsAutoCreate]
使用装饰器
# @admin.register(Student)
class StudentsAdmin(admin.ModelAdmin):
    def gender(self):
        if self.sgender:
            return 'male'
        else:
            return 'female'
    # 设置页面列名
    gender.short_description = '性别'
    list_display = ['pk', 'sname', gender, 'sage', 'scontend', 'sgrade', 'isDelete']
    list_per_page = 5
    # 执行动作的位置
    actions_on_bottom = True
    actions_on_top = False
admin.site.register(Students, StudentsAdmin)

视图的基本使用

是python函数,在views.py文件中定义
定义视图
def grades(request):
    # 去模板里取数据
    grades_list = Grades.objects.all()
    # 将数据传给模板
    return render(request, 'myapp/grades.html', {"grades": grades_list})


def students(request):
    student_list = Students.stuObj2.all()
    return render(request, 'myapp/students.html', {'students': student_list})
配置url
①修改project/urls.py
from myapp import urls

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('myapp.urls'))
]
②在app/urls.py创建
urlpatterns = [
    # 匹配无字符
    url(r'^$', views.index),
    # 匹配数字
    url(r'^(\d+)/$', views.detail),  # 正则表达式
    url(r'^grades/$', views.grades),
    url(r'^students/$', views.students),
]
附:模板(html文件)的基本使用
是html的页面,并且可以根据视图中传递的数据进行填充
①创建项目模板目录
F:\PYTHONFILES\LEARN_DJANGO\PROJECT\TEMPLATES
└─myapp
        grades.html
        students.html
②配置路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
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',
            ],
        },
    },
]
③定义模板
1{{ 值、变量、对象属性 }}
2{% python执行代码块 %}
④写模板
# grades.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>班级信息</title>
</head>
<body>
    <h1>班级信息列表</h1>
    <u1>
        {% for grade in grades %}
        <li>
            <a href="{{ grade.id }}">{{ grade.gname }}</a>
        </li>
        {% endfor %}
    </u1>
</body>
</html>

# students.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
    <h1>学生信息列表</h1>
    <u1>
        {% for student in students %}
        <li>
            <a href="#">{{ student.sname }}----{{ student.scontend }}----{{ student.sage }}</a>
        </li>
        {% endfor %}
    </u1>
</body>
</html>
⑤定义视图
def grades(request):
    # 去模板里取数据
    grades_list = Grades.objects.all()
    # 将数据传给模板
    return render(request, 'myapp/grades.html', {"grades": grades_list})


def students(request):
    student_list = Students.stuObj2.all()
    return render(request, 'myapp/students.html', {'students': student_list})
⑥配置urls.py
    url(r'^grades/$', views.grades),
    url(r'^students/$', views.students),
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值