Django入门 | Django开发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django入门 | Django开发相关的知识,希望对你有一定的参考价值。

-- 入门

# Django开发流程:
#     1.创建虚拟环境;
#     2.安装django;
#     3.创建项目;
#     4.创建应用;
#     5.在models.py中定义模型类,为视图提供数据;
#     6.定义视图,处理浏览器请求
#     7.配置URL
#     8.创建模板,呈现数据

-- 虚拟环境
    # 针对python不同项目,而对应安装的一堆包的集合;
    -- ubuntu中安装虚拟环境的命令(安装两个虚拟环境包,第二个是简易化操作)
        sudo pip install virtualenv
        sudo pip install virtualenvwrapper  
    -- 创建虚拟环境
        mkvirtualenv 环境名称
        mkvirtualenv py_django
    -- 查看与使用虚拟环境
        workon 两次tab键
        workon py_django
    -- 删除虚拟环境
        rmvirtualenv 虚拟环境名称
        先退出:deactivate
        再删除:rmvirtualenv py_django
        # 在创建虚拟环境过程中,在home目录下的.virtualenvs文件下,
        # 会生成刚创建的虚拟环境,而且过程中系统会默认生成多个包,
        # 以及将usr/bin/文件下的python文件复制到这个虚拟环境包里
        # 的/bin文件下;
    -- 查看当前所有的包
        pip list 或者pip freeze
        # 或者:~/.virtualenvs/py_django/lib/python2.7/site-packages下
        # 查看所有的包
    -- 虚拟环境下安装包
        pip install 包名称
        安装django1.8.2的包
        pip install django==1.8.2
    
-- 创建项目(图书,英雄,一对多的关系)
    # 在Desktop下创建,不会出现权限问题;
    django-admin startproject 项目名称

-- 修改数据库配置
    DATABASES = {
        default:{
            ENGINE:django.db.backends.mysql,  # 数据库引擎
            NAME:my_model, # 数据库名称,需要手动在mysql中创建数据库
            USER:root, # 用户名
            PASSWORD:mysql, # 密码
            HOST:localhost, # 主机
            PORT:3306 # 端口
        }
    }
    # python3 使用PyMysql数据库驱动,需要在__init__.py文件下写入
    import pymysql
    pymysql.install_as_MySQLdb()

-- 创建应用
    python manage.py startapp booktest(应用名称)

-- 添加/安装应用
    在test1/settings.py中INSTALLED_APPS下添加应用名称就可以安装;
    bootest;

-- 模型设计
    -- 创建模型类
    -- models.py
        # 定义类时,需要继承models.Model类;
        # class BookInfo(models.Model):
        btitle = models.CharField(max_length=20)  # 设置字符长度;
        bpubdate = models.DateField()  # 设置日期格式;
        
        # class HeroInfo(models.Model):
        hname = models.CharField(max_length=20)
        hcontent = models.CharField(max_length=100)
        hgender = models.BooleanField(default=True)  # 设置布尔类型;
        hbook = models.ForeignKey(BookInfo)  # 设置外键对象;英雄来源哪本书;

        -- 生成迁移文件(相当于生成sql语句,以及执行)
            生成:python manage.py makemigrations(执行sql语句)
                # 查看迁移文件对应的sql语句
                # python manage.py sqlmigrate news 0001
            执行:python manage.py migrate(创建表结构)
            # 要执行迁移文件,才可以注册后台用户
    
-- 后台管理(CMS内容管理系统)
    -- 创建管理员
        -- 注册用户
            python manage.py createsuperuser
            # 用户名默认:python;密码:chuanzhi
        -- 后台登入及修改界面
            -- 启动服务器,浏览
                python manage.py runserver
                http://127.0.0.1:8000/admin
            -- 修改界面语言(默认英文)
                settings.py文件中修改成 LANGUAGE = zh-Hans;TIME_ZONE = Asia/Shanghai
                # 在.virtualenvs/py_django/lib/python2.7/site-packages/django/contrib/admin/local/文件下
        -- 后台管理引入模型类 
            # admin.py(注册模型类,将model.py创建的类引入后台)
            from models import *
            admin.site.register(BookInfo)
            admin.site.register(HeroInfo)
            # str方法中,使用了中文,需要在模型类中str方法下的属性encode("utf-8")
        -- 自定义字段显示信息
            # 在后台显示所有属性,继承admin.ModelAdmin类
            class BookInfoAdmin(admin.ModelAdmin):
                list_display = [id, title, pub_date]
            class HeroInfoAdmin(admin.ModelAdmin):
                list_display = [id, name, content, gender, book]
            # 将添加属性的类添加到注册中;
            admin.site.register(BookInfo, BookInfoAdmin)

            -- 或者:将注册代码以装饰器的形式装饰到定义的属性类;
                @admin.register(BookInfo)
                class BookInfoAdmin(admin.ModelAdmin):
                    list_display = [id, title, pub_date]
        
-- 视图(制作公共访问的页面)
    -- 定义视图函数(接受request,返回HttpResponse)
        from django.http import HttpResponse
        # 必须传入HttpRquest对象的request,返回HttpResonse对象;
        def index(request):
            return HttpResponse(hello world)            

    -- 配置URLconf(找到对应视图函数)
        # 用户输入url,去掉域名与端口,再去匹配URLconf,对应调用view.py下的视图函数;
        -- URLconf 编写规则
            1.使用正则表达式定义;
            2.使用view.py中定义的视图
            
        -- URLconf 配置过程
            1.在自己创建的应用(booktest)中创建urls.py文件,配置URLconf,定义;
                from django.conf.urls import url
                from . import views
                urlpatterns = [url(r^$, views.index),] # view.index调用视图模块中定义的index函数;
            2.在项目中的url.py,链接到应用的URLconf中;
                url(r^, include(booktest.urls)),
                # 其完整代码
                from django.conf.urls import include, url
                from django.contrib import admin
                
                urlpatterns = [
                    url(r^admin/, include(admin.site.urls))
                    url(r^, include(booktest.urls)),
                    ]
    
-- 模板    
    -- 视图中寻找模板
        -- 在settings.py中做设置,为了找到templates模板文件位置
            DIRS:[os.path.join(BASE_DIR, templates)],  
            # 定义模板文件位置:根目录;

        -- 在views.py中加载渲染模板
            def index(request):
                cag = NewsCategory.objects.get(pk=1) # pk(primary key)相当于Id
                data = {cag: cag.cag_name}
                tpl = loader.get_template(index.html)
                new_tpl = tpl.render(data)
                return HttpResponse(new_tpl)
            # 简写成一下操作: 
            def index(request):
                context = {a:b, c:d}
                return render(request, booktest/index.html, context)  # context用
                # context中的键值作为标签内容传入页面;

--  测试test.py
    python3 manage.py test model(应用)

 

以上是关于Django入门 | Django开发的主要内容,如果未能解决你的问题,请参考以下文章

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)(代码片段

如何在 Django 中显式重置模板片段缓存?

如何在 Django Summernote 中显示编程片段的代码块?

Django入门 | Django开发

Django入门2

Python开发之Django框架入门Django安装