zoukankan      html  css  js  c++  java
  • django框架简介

    -------------------MVC与MVT框架-------------------
    1、MVC
    MVC框架的核心思想是:解耦。降低各功能模块之间的耦合性,方便将来变化时,更容易重构代码,最大程度上实现代码的重用。m表示model,重要用于对数据层的封装;v表示view,用于向用户展示结果;c表示controller,是核心,用于处理请求、获取数据、返回结果。
    2、MVT
    Django是一款分层框架,用于使用python进行web开发,与MVC所不同,属于MVT框架。m表示model,负责与数据库交互,v表示view,是核心,负责接收请求、获取数据、返回结果;t表示template,负责呈现内容到流程器。


    -------------------环境搭建-------------------
    1、Linux下创建虚拟环境
    1、mkvirtualenv [虚拟环境名称]:创建
    2、rmvirtualenv [虚拟环境名称]:删除
    3、workon:查看当前虚拟环境list
    4、workon [虚拟环境名称]:进入对应的虚拟环境
    5、deactivate:退出
    6、所有的虚拟环境都位于/home/.virtualenvs目录下
    7、pip list/pip freeze:查看当前虚拟环境中所安装的包

    2、安装django
    1、建议安装1.8.2版本:
    2、安装指令:
    pip install django==1.8.2
    3、查看安装版本
    import django
    django.get_version()

    3、创建项目
    1、创建指令:
    django-admin startproject [项目名称]
    2、目录中文件的说明

    4、目录说明
    1、manage.py:一个命令行工具,可以使你用多种方式对django项目进行交换
    2、内置的目录:项目的真正的python包
    3、__init__.py:一个空文件,它告诉python这个目录应该被看做一个python包
    4、setting.py:项目的配置
    5、urls.py:项目的URL声明
    6、wsgi.py:项目与WSGI兼容的web服务器入口


    -------------------定义模型-------------------
    1、数据库配置
    1、在setting.py文件中,通过DATABASES项进行数据库设置。
    2、django支持的数据库包括:sqlite、mysql等主流数据库。
    3、Django默认使用SQLite数据库。

    2、创建应用
    1、创建应用的命令
    python manage.py startapp [应用的名称]。

    2、定义模型类
    1、有一个数据表,就有一个模型类与之对应。
    2、打开models.py文件,定义模型类。
    3、引入包from django.db import models。
    4、模型类继承自models.Model类。
    5、说明:不需要定义主键列,在生成时会自动添加,并且值为自增长。
    6、当输出对象时,会调用对象的str方法。

    3、生成数据表
    1、激活模型:
    编辑setting.py文件,将[引用的名称]加入到installed_apps中
    2、生成迁移文件:
    python manage.py makemigrations
    3、迁移文件被生成到migrations目录中
    4、执行迁移:
    python manage.py migrate

    4、测试数据操作
    1、进入python shell 中:
    python manage.py shell
    2、引入对应的包
    1、from [应用的名称].models import [模块的名称]
    2、from django.utils import timezone
    3、from datetime import *
    3、对应的测试指令
    1、[模块的名称].objects.all():数据的查询
    2、[模块的名称].objects.get(pk=1):指定主键条件进行查询
    3、model = [模块的名称]():创建一个对象
    4、model.save():进程对应数据向数据库的存储
    5、model.delete():删除这条数据
    6、model.heroinfo_set.all():获取到指定对象所关联的HeroInfo表中的信息


    -------------------使用后台进行数据库的管理-------------------
    1、服务器
    1、开启服务器指令
    python manage.py runserver

    2、服务器默认端口8000,修改服务器端口为8080
    python manage.py runserver 8080

    3、注意
    1、修改文件不需要重启服务器,增加、删除文件需要重启服务器
    2、ctrl+c停止服务器

    2、管理操作
    1、使用django的管理:
    1、创建一个管理员用户
    python manage.py createsuperuser
    2、浏览器连接后台:
    通过127.0.0.1:8000/admin;进行对后台管理界面的访问。
    3、进入管理站点,默认可以对group、users进行管理

    2、管理界面本地化:
    1、编辑settings.py文件,设置编码、时区
    2、编码:
    LANGUAGE_CODE = 'zh-Hans'
    3、时区:
    TIME_ZONE = 'Asia/Shanghai'

    3、向admin注册[应用的名称]的模型
    1、from django.contrib import admin
    2、from models import BootInfo:引用模块中的对应数据表包
    3、admin.site.register(BookInfo):进行指定数据的注册操作

    4、自定义管理界面
    class QuestionAdmin(admin.ModelAdmin):
    list_display = ['pk','btitle','bpub_date']
    admin.site.register(Question,QuestionAdmin)

    2、列表页属性:
    1、list_display:显示字段,可以点击列头进行排序
    list_display = ['pk','btitle','bpub_date']
    2、list_filter:过滤字段,过滤框会出现在右侧
    list_filter = ['btitle']
    3、search_fields:搜索字段,搜索框会出现在上侧
    search_fields = ['bible']
    4、list_per_page:分页,分页框会出现在下侧
    list_per_page = 10
    3、添加、修改也属性
    1、field:属性的先后顺序
    field = ['bpub_date','btitle']
    2、fieldsets:属性分组
    fieldsets = [
    ('basic',{'fields':['btitle']}),
    ('more',{'fields':['bpub_date']})
    ]

    5、关联对象
    from django.contrib import admin
    from models import BookInfo,HeroInfo
    class HeroInfoline(admin.StackedInline/admin.TabularInline):
    model = HeroInfo
    extra = 2

    class BookInfoAdmin(admin.ModelAdmin):
    inlines = [HeroInfoInline]

    admin.site.register(BookInfo,BookInfoAdmin)

    6、布尔值的显示
    def sex():
    if self.hsex:
    return '男'
    else :
    return '女'
    sex.short_description = '性别'

    class HeroInfoAdmin(admin.ModelAdmin):
    list_display = ['id','hname','sex','hcontent']


    -------------------视图-------------------
    1、设置views.py
    from django import HttpResponse

    def index(requset):
    return HttpResponse('index')

    def detail(requset):
    return HttpResponse('detail')

    2、配置URLconf
    1、URLconf包含正则表达式和视图两部分
    2、进行test1中url的编写
    url(r'^',include('booktest.urls'))
    3、在booktest中进行urls的编写操作
    from django.conf.urls import url
    from . import views
    urlpatters = [
    url(r'^',view.index),
    url(r'^([0-9]+)/$',view.detail),
    ]


    -------------------模板-------------------
    1、模板文件夹创建
    1、创建对应存放模板的文件夹
    mkdir templates/booktest/index.html
    2、修改setting.py文件,设置TEMPLATES的DIRS值
    'DIRS':[os.path.jion(BASE_DIR,'templates')],

    2、创建模板
    1、在模板中访问试图传递的数据
    {{输出值,可以是变量,也可以是对象.属性}}
    {%执行代码%}

    3、使用模板
    1、编辑views.py文件,在方法中调用模板
    from django.http import HttpResponse
    from django.template import RequestContext,loader
    from models import BookInfo

    def index(request):
    booklist = BookInfo.objects.all()
    template = loader.get_template('booktest/index.html')
    context = RequestContext(request,{'booklist':booklist})
    return HttpResponse(template.render(context))

    4、去除模板的硬编码
    1、修改test1/urls.py文件,在include中设置namespace
    url(r'^admin/',include(admin.site.urls,namespace='booktest')),
    2、修改booktest/urls.py文件,设置name
    url(r'^book/([0-9]+)/$',views.detail,name='detail')
    3、修改index.html模板中的链接
    <a herf ="{% url 'booktest:detail' book.id%}">


    5、Render简写
    from django.shortcuts import render
    from models import BookInfo

    def index(reqeust):
    booklist = BookInfo.objects.all()
    return render(reqeust,'booktest/index.html',{'booklist':booklist})

  • 相关阅读:
    POJ:1185-炮兵阵地(状压dp入门)
    LightOj:1422-Halloween Costumes
    HDU:4632-Palindrome subsequence
    POJ:2955-Brackets(经典:括号匹配)
    POJ:2342-Anniversary party(树形dp入门题目)
    HUD:2853-Assignment(KM算法+hash)
    HDU:2255-奔小康赚大钱(KM算法模板)
    POJ:3020-Antenna Placement(二分图的最小路径覆盖)
    POJ:3041-Asteroids(匈牙利算法模板)
    SVN
  • 原文地址:https://www.cnblogs.com/qingtianyu2015/p/6064066.html
Copyright © 2011-2022 走看看