zoukankan      html  css  js  c++  java
  • <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
    

     运行结果

  • 相关阅读:
    [转载]PhotoShop性能优化
    SVN常用命令
    [转载]SVN使用教程
    MyEclipse Java Build Path详解
    MyEclipse安装后需要进行的配置
    c#中base64加密解密
    C# MD5 加密
    C# http Post 方法
    EPF与Myeclipse 增强代码自动智能提示
    汉字代码手册
  • 原文地址:https://www.cnblogs.com/shuimohei/p/10656819.html
Copyright © 2011-2022 走看看