Django

作者: 悟空你又瘦了 | 来源:发表于2018-12-10 17:43 被阅读0次

    https://docs.djangoproject.com/zh-hans/2.0/

    django-admin startproject BookManager

    创建项目BookManager
    django-admin startproject BookManager
    
    BookManager : 是与项目同名的文件, 内部包含如下项目的配置文件.
    init.py : 是表示文件BookManager可以被当作包使用.
    settings.py : 是项目的整体配置文件.
    urls.py : 是项目的URL配置文件.
    wsgi.py : 是项目与WSGI兼容的Web服务器入口.
    manage.py : 是项目运行的入口, 指定配置文件路径.
    
    

    python manage.py startapp wjj

    创建Book应用
    python manage.py startapp wjj
    
    admin.py : 是后台的站点管理注册文件.
    init.py : 是表示文件Book可以被当作包使用.
    migrations : 是做模型迁移的.
    models.py : 是处理数据的.MVT中的M
    tests.py : 是做测试用的.
    views.py : 是处理业务逻辑的.MVT中的V
    

    安装应用 BookManager/settings.py

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

    测试服务器 python manage.py runserver / 按ctrl+c停止服务器

    ip和端口号可以不写, 默认ip为127.0.0.1;端口号为8000.
     python manage.py runserver
    
    python manage.py runserver ip:端口
    python manage.py runserver 172.16.21.25:8001
    

    模型

    from django.db import models
    
    # Create your models here.
    
    
    class BookInfo(models.Model):
        """定义书籍信息模型类"""
    
        # 设计name属性
        name = models.CharField(max_length=10)
    
    
        def __str__(self):
            """以字符串的形式输出模型类"""
            return self.name
    
    
    class PeopleInfo(models.Model):
        """定义人物信息模型类"""
    
        name = models.CharField(max_length=10)
        gender = models.BooleanField()
        book = models.ForeignKey(BookInfo,None)
    
        def __str__(self):
            """以字符串的形式输出模型类"""
            return self.name
    
    
    模型迁移 
    
    生成迁移文件:根据模型类生成创建表的语句
    python manage.py makemigrations
    
    执行迁移:根据第一步生成的语句在数据库中创建表
    python manage.py migrate
    

    站点管理 BookManager/settings.py

    本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化.
    中国大陆地区使用简体中文, 时区使用亚洲/上海时区, 注意这里不使用北京时区.
    LANGUAGE_CODE = 'zh-Hans'
    TIME_ZONE = 'Asia/Shanghai'
    
    
    
    创建管理员(按提示输入用户名、邮箱、密码)
     python manage.py createsuperuser   
    
    
    
    登陆站点 : http://127.0.0.1:8000/admin
    
    
    
    注册模型类  wjj/admin.py
    from django.contrib import admin
    from wjj.models import BookInfo, PeopleInfo
    
    # Register your models here.
    class PeopleInfoAdmin(admin.ModelAdmin):
        """人物信息模型类的站点管理类"""
    
        list_display = ['id','name','gender','book']
    
    
    # 注册书籍信息模型类
    admin.site.register(BookInfo)
    # 注册人物信息模型类及站点管理类
    admin.site.register(PeopleInfo,PeopleInfoAdmin)
    

    视图和URL

    1. 定义视图
    视图就是一个Python函数,被定义在应用的views.py中.
    视图的第一个参数是HttpRequest类型的对象reqeust,包含了所有请求信息.
    视图必须返回HttpResponse对象,包含返回给请求者的响应信息.
    需要导入HttpResponse模块 : from django.http import HttpResponse
    定义视图函数 : 响应字符串OK!给客户端
    
    from django.shortcuts import render
    from django.http import HttpResponse
    from Book.models import BookInfo, PeopleInfo
    
    # Create your views here.
    
    
    def peopleList(request, book_id):
        """提供人物信息界面的"""
        # 获取book_id:通过正则的组取值,并自动传入
    
        # 查询出用户点击的那本书
        book = BookInfo.objects.get(id=book_id)
        # 查询出书里面的人物信息 people_list = [PeopleInfo,PeopleInfo]
        people_list = book.peopleinfo_set.all()
    
        # 上下文
        context = {
            'people_list':people_list
        }
    
        # 调出模板并渲染
        return render(request, 'Book/peoplelist.html', context)
    
    
    def bookList(request):
        """提供书籍信息界面的"""
    
        # 查询出所有书籍信息 book_list = [BookInfo,BookInfo]
        book_list = BookInfo.objects.all()
    
        context = {
            'book_list':book_list
        }
    
        return render(request, 'Book/booklist.html', context)
    
    
    
    2. url入口
    
    BookManager/settings.py
    ROOT_URLCONF = 'BookManager.urls'
    
    需要两步完成URLconf配置
    1.在项目中定义URLconf
    from django.conf.urls import include, url
    from django.contrib import admin
    
    urlpatterns = [
        # http://127.0.0.1:8000/admin/
        # 正则匹配,对请求地址进行正则匹配,如果路径中包含'admin/',就把后台站点中的urls信息包含到项目中,指明下一级路径如何匹配
        url(r'^admin/', include(admin.site.urls)),
    
        # 127.0.0.1:8000/test/  # http://127.0.0.1:8000/booklist/  # http://127.0.0.1:8000/1/
        # 正则匹配,对请求地址进行正则匹配,如果路径中不包含'admin/',就把Book应用中的urls信息包含到项目中,指明下一级路径如何匹配
        url(r'^', include('Book.urls'))
    ]
    
    
    2.在应用中定义URLconf
    from django.conf.urls import url
    from Book.views import test, bookList, peopleList
    
    
    urlpatterns = [
    
        # http://127.0.0.1:8000/booklist/
        url(r'^booklist/$', bookList),
    
        # http://127.0.0.1:8000/1/
        url(r'^(\d+)/$', peopleList)
    ]
    
    
    

    路由匹配视图流程总结


    路由匹配视图流程总结.png

    模板

    1.创建模板
    在应用同级目录下创建模板文件夹templates. 文件夹名称固定写法.
    在templates文件夹下, 创建应用同名文件夹. 例, Book
    在应用同名文件夹下创建网页模板文件. 例 : index.html
    
    2.设置模板查找路径
    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',
                ],
            },
        },
    ]
    
    3.模板接收视图传入的数据
    4.模板处理数据
    
    booklist.html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>书籍信息</title>
    </head>
    <body>
    
    <ul>
        {% for book in book_list %}
            <li><a href="/{{ book.id }}/">{{ book.name }}</a></li>
        {% endfor %}
    </ul>
    
    </body>
    </html>
    
    peoplelist.html
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>人物列表信息</title>
    </head>
    <body>
    
    <ul>
        {% for people in people_list %}
            <li>{{ people.name }}</li>
        {% endfor %}
    </ul>
    
    </body>
    </html>
    
    VT流程总结.png

    相关文章

      网友评论

          本文标题:Django

          本文链接:https://www.haomeiwen.com/subject/axmmcqtx.html