<Django>第一篇:入门的例子

 

1.MVT框架

 

  Model(模型):数据库交互相关。在这部分一般需要进行三个操作:

    (1)面向数据库:模型对象、列表

    (2)定义模型类:指定属性及类型,确定表结构(设计表),需要迁移(生成表)

    (3)后台管理:创建管理员,启动服务器,admin,注册admin.py,就可以在admIn中完成表的增删改查

  View(视图):核心,负责业务逻辑,获取请求(从URL控制器),获取数据(从Models获取数据),返回结果(结果给Template)、配置URL(自己的应用中配置)

  Template(模板):放所有html(前端模板)文件、

                            加载:读取文件内容到内存

                            渲染:根据模板填入数据

        展示的内容和我的处理逻辑不相关----解耦的思想

  图解:

    

2.入门例子

(1)安装Django  

  pip install django #后面可接版本号

查看版本号(这里使用的是django 2.0.2版本)

# 版本查看(进入python shell)
import django
django.get_version()

(2)创建项目   

django-admin startproject 项目名称

  

manage.py :启动文件

settings.py:项目设置,数据库信息,调试标志及其他工作变量

urls.py :路由,路径与视图函数的映射关系

wsgi.py:项目与WSGI兼容的服务器入口,runserver命令就能使用wsgiref模块做简单web服务

 

用pycharm创建项目(专业版)

结果:

(3)创建应用

cd 项目名称
pyhton manage.py startapp 应用名称

(4)定义模型类(models.py)

实际上就是定义表结构,并生成表

定义模型(表结构)models.py文件

from django.db import models


# Create your models here.

class BookInfo(models.Model):
	btitle = models.CharField(max_length=20)
	bpub_date = models.DateTimeField()

	def __str__(self):
		return "%s" % self.btitle


class HeroInfo(models.Model):
	hname = models.CharField(max_length=20)
	hgender = models.BooleanField()
	hcontent = models.CharField(max_length=100)
	hBook = models.ForeignKey("BookInfo",on_delete=models.CASCADE,)

	def __str__(self):
		return "%s" % self.hname

激活模型(编辑setting.py文件,将APP加入到install_apps)----或者说把应用注册到项目里面

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'booktest',
]

生成迁移文件(实际上就是生成上述表结构对应的SQL语句)

python manage.py makemigrations

执行迁移(实际上就是利用上面SQL语句生成对应的表)

python manage.py migrate

建立管理员账户(为了进行表的管理)

python manage.py creatsuperuser
# 按照提示依次输入账号、邮箱、密码(不能全是数字缺大于8位)

管理界面中文(设置Settings.py文件)

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

 把模型类注册到管理里面去(admin.py,这个文件就用作管理的)-----后台管理

from django.contrib import admin
# python3 写法
from .models import *


# Register your models here.
# 关联注册 (内部停靠),
# class HeroInfoline(admin.StackedInline):
# 表格效果
class HeroInfoline(admin.TabularInline):
	# 嵌入哪个类(一对多中,多的部分)
	model = HeroInfo
	# 增加一本图书的时候,还可以增加2个heroinfo
	extra = 2

class BookInfoAdmin(admin.ModelAdmin):
	# 列表页显示
	# 列表
	list_display = ['id', 'btitle', 'bpub_date']
	# 过滤
	list_filter = ['btitle']
	# 搜索(支持模糊查询)
	search_fields = ['btitle']
	# 分页(每页显示多少条)
	list_per_page = 10

	# 添加页,修改页
	# 展示列表fields 和	fieldsets只能同时存在一个,功能一致
	# fields = ['bpub_date','btitle']
	# 分组
	fieldsets = [
		('base', {'fields': ['btitle']}),
		('super', {'fields': ['bpub_date']})
	]

	# 关联注册第二步,关联起来(一对多中,一的部分)
	inlines = [HeroInfoline]



# admin.site.register(BookInfo)
# 注册
admin.site.register(BookInfo, BookInfoAdmin)
admin.site.register(HeroInfo)

(5)定义视图(views.py)----本质就是函数

 

from django.shortcuts import render

# response request
from django.http import *

# 引用模板需要需要引入的包;loader(加载)
from django.template import RequestContext, loader

# 通过模型类拿数据
from .models import *

# Create your views here.
# 这里要创建index页面
def index(request):
	'''
	# 加载模板
	temp = loader.get_template('booktest/index.html')
	# 渲染模板,执行模板内容render()
	return HttpResponse(temp.render())
	'''
	# 通过模型查数据
	bookList = BookInfo.objects.all()
	# 传入的数据
	context = {'list':bookList}
	# 封装成render函数 一步即可
	return render(request, 'booktest/index.html',context)

(6)配置url(urls.py)

主urls

from django.contrib import admin
from django.urls import path
from booktest import views
# 分发urls
from django.conf.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    # 正则
    path('index/', views.index),
    # 分发urls,使用APP里面配置urls
    path('',include('booktest.urls')),
]

一般为了防止主urls挂掉,影响全部APP,会在每个APP里面建立分urls(在app里创建urls.py文件)

from django.urls import path
from booktest import views

urlpatterns = [
	path('123/', views.index),
]

(7)创建模板(template)

为了简化在views里面对数据的处理,在项目同级目录建立template文件夹,并根据APP名称建立对应的文件夹,在文件夹里在建立模板

为了能导入模板,除了上面在views.py的设定外,还需要在setting.py中设定模板路径

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',
            ],
        },
    },
]

index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Title</title>
</head>
<body>
{#遍历list#}
{% for book in list %}
<li>{{book.btitle}}</li>
{% endfor %}

</body>
</html>

(0)运行django ---创建好Django,随时都可以进行

python manage.py runserver

 运行结果

posted @ 2019-04-06 13:50  水墨黑  阅读(365)  评论(0编辑  收藏  举报