zoukankan      html  css  js  c++  java
  • 一个Django快速预览项目

    创建一个Django项目,会用到一些包,但是下载多了会导致电脑变卡、变慢,这个时候可以用到虚拟环境来解决这个问题,每写一个项目,便可以在虚拟环境内配置各种环境而不影响电脑本身的环境.

    • 我是用的是win10系统
    1. 首先先安装vitualenv:
    pip install virtualenv
    

    如果系统内有多个python环境的话,可以指定使用哪一个版本的python来安装.

    python2 -m pip install virtualenv
    
    python3 -m pip install virtualenv
    
    1. 新建一个虚拟环境:

    可以先在想要创建虚拟环境的盘内新建一个文件夹,使用命令行切换目录过去,在当前目录下新建虚拟环境,便于操作.

    virtualenv [虚拟环境名称]
    

    安装成功后会在当前目录多一个文件夹
    同样是多个python版本的用户可以指定版本

     virtualenv -p C:Python27python2.exe test2
    
    1. 虚拟环境基础操作

    进入虚拟环境:首先命令行进入test1文件夹下的Scripts目录.

    开启虚拟环境:activate/activate.bat
    退出虚拟环境:deactivate/deactivate.bat
    

    进入虚拟环境之后,可以通过pip来下载项目所需要的包和模块.

    pip install django==1.11    安装1.11版本的django
    
    • 但是这样有个缺点就是每次必须进入Scripts目录下,所以推荐使用一个扩展工具:virtualenvwrapper
    安装:pip install virtualenvwrapper-win
    

    有需要的朋友可以把默认安装虚拟环境的目录配置一下,没有需要的这一步可以跳过的.
    先在自己想要新建虚拟环境的地方新建文件夹,把它的目录地址复制,然后添加至系统变量中:

    然后重启cmd命令行,就可以使用了,如果不指定的话,默认是在C:UsersAdministratorEvns 这个目录下.

    • 新建虚拟环境:
      mkvirtualenv + [环境名]
    • 也可指定新建虚拟环境的版本:
      mkvirtualenv --python=[python路径] + [环境名]
    • 查看所有通过mkvirtualenv创建的虚拟环境----- workon
    • 进入虚拟环境----workon + [环境名]
    • 退出虚拟环境----deactivate
    1. 接下在让咱们新将一个虚拟环境,并进入:
    mkvirtualenv django_python
    workon django_python
    
    1. 安装django:
    pip install django==1.11
    
    1. 我以我的目录为例:
    cd D:Django_project
    
    django-admin startproject test1 [项目名称]
    
    
    1. 然后进入项目目录:
    cd test1
    

    里面会有一些目录和文件:

    • manage.py是项目管理文件,通过它管理项目.
    • 与项目同名的目录,此处为test1.
    • init.py是一个空文件,作用是这个目录test1可以被当作包使用.
    • settings.py是项目的整体配置文件.
    • urls.py是项目的URL配置文件.
    • wsgi.py是项目与WSGI兼容的Web服务器入口.
    1. 创建应用:
    python manage.py startapp booktest
    

    应用目录里面也会有文件和目录:

    • _init.py_是一个空文件,表示当前目录booktest可以当作一个python包使用.
    • tests.py文件用于开发测试用例,在实际开发中会有专门的测试人员,这个事情不需要我们来做.
    • models.py文件跟数据库操作相关.
    • views.py文件跟接收浏览器请求,进行处理,返回页面相关.
    • admin.py文件跟网站的后台管理相关.
    1. 安装应用:

    应用创建成功后,需要安装才可以使用,也就是建立应用和项目之间的关联,在test1/settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装。

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'booktest',           这一行是新加入的
    ]
    
    1. 开发服务器:

    在开发阶段,为了能够快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用.

    命令 : python manage.py runserver ip:端口
    ip和端口可以省略
    例如:
    python manage.py runserver
    然后在浏览器中输入网址“127.0.0.1:8000”
    

    • 显示上图即为成功!
    1. 退出服务器,定义模型类:
      例:

    游戏类:
    Gname:游戏名字
    Gtime:创建事件

    from django.db import models
    
    # Create your models here.
    class Game(models.Model):
        Gname = models.CharField(max_length=50)
        Gtime = models.DateTimeField()
    
        def __str__(self):
            return self.Gname
    
    1. 进行迁移,分为两步:
    • 生成迁移文件:根据模型类生成创建表的迁移文件。
    • 执行迁移:根据第一步生成的迁移文件在数据库中创建表。

    生成迁移文件命令如下:

    python manage.py makemigrations
    

    执行生成迁移文件命令后,会在应用booktest目录下的migrations目录中生成迁移文件。
    执行迁移命令如下:

    python manage.py migrate
    

    当执行迁移命令后,Django框架会读取迁移文件自动帮我们在数据库中生成对应的表格。

    1. 设计英雄类:
      hname:名字;
      hclass:分类;
      hcomment:介绍;
      hgame:所属游戏(外键)
    class Hero(models.Model):
        hname = models.CharField(max_length=20)
        hclass = models.CharField(max_length=50)
        hcomment = models.CharField(max_length=200)
        hgame = models.ForeignKey(Game)
    
        def __str__(self):
            return self.hname
    

    创建完成之后再次进行迁移.
    然后在命令行输入:

    python manage.py shell
    
    • 首先引入booktest/models中的类:
    from booktest.models import *
    

    查询所有游戏信息:

    Game.objects.all()     因为当前并没有数据,所以返回空列表
    
    1. 新建一个游戏对象:
    g=Game()
    g.gname="王者荣耀"
    import datetime
    g.gtime=datetime.datetime.now()
    g.save()
    

    再次查询所有游戏信息:

    Game.objects.all()
    

    查找图书信息并查看值:

    g=Game.objects.get(id=1)
    

    删除图书信息:

    b.delete()
    

    游戏与英雄是一对多的关系,django中提供了关联的操作方式。
    获得关联集合:返回当前game对象的所有hero。

    b.hero_set.all()
    

    12 .管理界面本地化:

    本地化是将显示的语言、时间等使用本地的习惯,这里的本地化就是进行中国化,中国大陆地区使用简体中文,时区使用亚洲/上海时区,注意这里不使用北京时区表示.

    • 打开test1/settings.py文件,找到语言编码、时区的设置项,将内容改为如下:
    LANGUAGE_CODE = 'zh-hans' #使用中国语言
    TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
    
    1. 创建管理员
    • 创建管理员的命令如下,按提示输入用户名、邮箱、密码。
    python manage.py createsuperuser
    
    • 接下来启动服务器
    python manage.py runserver
    
    • 打开浏览器,在地址栏中输入如下地址后回车。

    http://127.0.0.1:8000/admin/

    登录成功后界面如下,但是并没有由游戏、英雄的管理入口,接下来进行第三步操作。

    1. 注册模型类:

    打开booktest/admin.py文件,编写如下代码:

    from django.contrib import admin
    from .models import *
    
    admin.site.register(Game)
    admin.site.register(Hero)
    
    1. 自定义数据管理页面:

    打开game/admin.py文件,自定义类,继承自admin.ModelAdmin类。

    • 属性list_display表示要显示哪些属性:
    class GameAdmin(admin.ModelAdmin):
        list_display = ['id', 'Gname', 'Gtime']
    
    class HeroAdmin(admin.ModelAdmin):
        list_display = ['id','hname','hclass','hcomment','hgame']
    

    修改模型类的注册代码如下:

    admin.site.register(Game,GameAdmin)
    admin.site.register(Hero,HeroAdmin)
    
    • 最终booktest/admin.py文件代码如下:
    from django.contrib import admin
    from .models import *
    
    class GameAdmin(admin.ModelAdmin):
        list_display = ['id', 'Gname', 'Gtime']
    
    class HeroAdmin(admin.ModelAdmin):
        list_display = ['id','hname','hclass','hcomment','hgame']
    
    admin.site.register(Game,GameAdmin)
    admin.site.register(Hero,HeroAdmin)
    
    1. 配置URLconf:

    一条URLconf包括url规则、视图两部分:

    • url规则使用正则表达式定义。
    • 视图就是在views.py中定义的视图函数。

    需要两步完成URLconf配置:

    • 1.在应用中定义URLconf.
    • 2.包含到项目的URLconf中.

    在game/应用下创建urls.py文件,定义代码如下:

    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^$',views.index),         # 不要加括号
        url(r'^(d+)$',views.index2)
    ]
    

    包含到项目中:打开test2/urls.py文件,为urlpatterns列表增加项如下:

    from django.conf.urls import url,include
    from django.contrib import admin
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^', include('game.urls'))
    ]
    
    1. 创建模板:

    为应用game下的视图index创建模板index.html
    如图

    设置查找模板的路径:打开test2/settings.py文件,设置TEMPLATES的DIRS值:
    image.png

    1. 定义模板:

    打开templtes/booktest/index.html文件,定义代码如下:.

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .box{
    
                border: 1px solid rebeccapurple;
    
            }
            .box a{
                color: black;
                font-size: 20px;
                text-decoration: none;
                transition: all 500ms linear,color 200ms;
            }
            .box a:hover{
                color: fuchsia;
    
            }
            .addd{
                 100%;
                height: 50px;
                background-color: slategray;
                border-radius: 4px;
            }
            .addd p{
                font-size: 20px;
                color: white;
                line-height: 50px;
                margin-left: 20px;
            }
        </style>
    </head>
    <body>
    <div class="addd">
       <p>查看</p>
    </div>
    <div class="box">
        <ul style="list-style: none">
            {% for game in list %}
                <li><a href="/{{ game.id }}" target="_blank" >
                    {{ game.Gname }}
                </a></li>
                <li style="color: red;font-size: 20px;">{{ game.Gtime }}</li>
                <li><hr/></li>
    
    
            {% endfor %}
        </ul>
    </div>
    </body>
    </html>
    

    效果为:
    image.png

    • 在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的。
      {{变量名}}
    • 在模板中编写代码段语法如下:
      {%代码段%}
    1. 打开game/views.py文件,调用上面定义的模板文件:
    from django.shortcuts import render
    from django.http import HttpResponse
    from .models import *
    from django.template import loader
    
    # Create your views here.
    
    def index(request):
        list = Game.objects.all()
        template = loader.get_template('game/index.html')
    
        ctx = {
            'list':list
        }
    
        return HttpResponse(template.render(ctx))
    def index2(request,gid):
        game = Game.objects.get(id=gid)
        list = game.hero_set.all()
        template = loader.get_template('game/index2.html')
    
        ctx = {
            'game': game,
            'list': list
        }
    
        return HttpResponse(template.render(ctx))
    
    1. 定义URLconf:

    编写game/urls.py文件如下:

    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^$',views.index),         # 不要加括号
        url(r'^(d+)$',views.index2)
    ]
    

    然后就可以run起来了.

  • 相关阅读:
    关于在centos下安装python3.7.0以上版本时报错ModuleNotFoundError: No module
    MSTP协议介绍和堆叠技术介绍
    RSTP技术详解
    5招解决路由黑洞
    系统批量运维管理器Fabric之部署LNMP业务环境
    系统批量运维管理器Fabric之动态获取远程目录列表
    系统批量运维管理器Fabric之查看远程主机信息
    系统批量运维管理器Fabric之基本语法篇
    系统批量运维管理器Fabric之环境搭建篇
    LightGBM 调参方法(具体操作)
  • 原文地址:https://www.cnblogs.com/lygiants/p/11118373.html
Copyright © 2011-2022 走看看