django-练习1

本文档详述了使用Django框架进行MVT(Model-View-Template)应用的实战步骤,包括创建app、配置settings、定义模型、数据迁移、设置管理员、设计后台管理界面、配置路由、创建模板和视图函数等。
摘要由CSDN通过智能技术生成
MVT综合应用
1.创建一个app, movies

语法: python manage.py startapp appname
python manage.py startapp movies

2.在settings.py 中配置app
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'goods'
    'movies'  # 配置movies app
]
3.创建模型类
from django.db import models

# Create your models here.

class MovieInfo(models.Model):
    '''电影信息类
    电影名
    电影简介
    上映状态:默认为已上映:True
    '''
    name = models.CharField(max_length=20)
    introduction = models.TextField()
    state = models.BooleanField(default=True)
    
    #默认的str()方法是返回对象的数据类型,这里重写str()方法
    def __str__(self):
        return self.name
    

class RoleInfo(models.Model):
    '''
    演员信息表
    姓名
    性别,性别为字符型,默认是'女'
    角色
    电影类和角色类是一对多的关系,一个电影会出现多个角色
    '''
    name = models.CharField(max_length=20)
    gender = models.CharField(default='女')
    comment = models.TextField()
    Mrole = models.ForeignKey('MovieInfo', on_delete=models.CASCADE)
    
    def __str__(self):
        return self.name

4. 数据迁移

python manage.py makemigrations

# Generated by Django 3.0.3 on 2020-03-01 03:43

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='MovieInfo',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=20)),
                ('introduction', models.TextField()),
                ('state', models.BooleanField(default=True)),
            ],
        ),
        migrations.CreateModel(
            name='RoleInfo',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=20)),
                ('gender', models.CharField(default='女', max_length=2)),
                ('comment', models.TextField()),
                ('Mrole', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='movies.MovieInfo')),
            ],
        ),
    ]

python manage.py migrate
在这里插入图片描述

5. 添加数据信息(略)

在这里插入图片描述
在这里插入图片描述

6. 设置管理员

配置本地化信息(略)
python manage.py createsuperuser

7. 设计后台管理页面
from django.contrib import admin
from movies.models import MovieInfo, RoleInfo


# 1.自定义后台管理类
class MovieInfoAdmin(admin.ModelAdmin):
    '''管理电影信息'''
    # 定义显示的列
    list_display = ['id', 'name', 'state', 'introduction']  # 列名要和迁移文件中fields列表中的名称一致


class RoleInfoAdmin(admin.ModelAdmin):
    '''管理演员信息'''
    list_display = ['id', 'name', 'gender', 'comment', 'Mrole']


# Register your models here.
# 2.建立模型类和后台管理类的映射关系
admin.site.register(MovieInfo, MovieInfoAdmin)
admin.site.register(RoleInfo, RoleInfoAdmin)

python manage.py runserver
在这里插入图片描述
用户管理
在这里插入图片描述
电影管理
在这里插入图片描述
角色管理
在这里插入图片描述

8.配置项目路由

在movies下新建urls.py文件
在项目urls.py文件中添加app movies中的urls文件

from django.contrib import admin
from django.urls import path, re_path, include

urlpatterns = [
    path('admin/', admin.site.urls),  # 配置项目
    re_path(r'^', include('goods.urls')),  # 包含app goods中的urls文件
    re_path(r'^', include('movies.urls')), # 包含app movies中的urls文件
]
9. 在template文件夹下新建一个movies包,然后创建模板文件

movies.html 用于显示电影列表
detail.html 用于显示每个电影的详细信息

10.创建视图函数
from django.shortcuts import render
from movies.models import MovieInfo, RoleInfo


# Create your views here.
#127.0.0.1:8000/movies
def show_movies(request):
    # 1.获取电影信息
    movies = MovieInfo.objects.all()
    return render(request,'movies/movies.html', {'movies': movies})

# 127.0.0.1:8000/movies/id
def role_detail(request,mid):
    movie = MovieInfo.objects.get(id=mid)  # 获取对应id的电影信息
    roles = movie.roleinfo_set.all()  # 获取该电影对应的角色信息
    return render(request, 'movies/detail.html', {'movies':movie, 'roles': roles})

11. 配置movies的路由
from django.conf.urls import url
from movies import views


urlpatterns = [
    # 通过url函数设置url路由配置项
    url(r'^movies$', views.show_movies),  # 建立127.0.0.1:8000/movies和视图函数show_movies()之间的关系
    url(r'^movies/(\d+)$', views.role_detail)  # 建立127.0.0.1:8000/movies/id和视图函数role_detail()之间的关系
    # 在正则表达式中定义组,可以将组里的内容作为参数传递给视图,即mid
    # 注意这里只是匹配视图名称,不是调用视图函数
]

12.编写模板文件

detail.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>电影角色</title>
</head>
<body>
电影角色
{% for role in roles %}
    <li>{{ role.name }}</li>
    <ol>{{ role.gender }}</ol>
    <ol>{{ role.comment }}</ol>
    {% empty %}
    <ol>没有更多信息了</ol>
{% endfor %}
</body>
</html>

movies.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>电影列表</title>
</head>
<body>
电影信息
{% for movie in movies%}
    <li><a href = "/movies/{{ movie.id }}">{{movie.name}}</a></li>
    <ol>{{ movie.introduction}}</ol>
{% endfor %}
</body>
</html>
13.运行

在这里插入图片描述
点击我和我的祖国
在这里插入图片描述
点击中国机长
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值