Djando项目的开发

1. Django基本流程

1.0 Django的安装

打开cmd,输入pip install Django== '版本号',如果不用==版本号,默认安装最新版。
验证是否安装成功,进入python目录下
在这里插入图片描述

1.1 Django框架

类比MVC,Django框架为MVT。

  1. MVC

M(model),管理数据
V(View),显示数据,依据模型数据创建
C(controller),业务逻辑处理

  1. MTV

M(model),管理数据
T(template),显示数据给用户,依据模型数据创建
V(View),业务逻辑处理

在这里插入图片描述

1.2 目录层级说明

查看目录层级,在cmd输入tree . /F
在这里插入图片描述
项目目录

1.3 应用的创建

在这里插入图片描述

1.4 定义模型

在这里插入图片描述

#Create your models here.
#-*- coding: utf-8 -*-
from __future__ import unicode_literals
from datetime import datetime
from django.db import models
#继承django框架里设计好的用户表AbstractUser
from django.contrib.auth.models import AbstractUser
class UserProfile(AbstractUser):
    nick_name = models.CharField(max_length=50, default=u'', verbose_name=u'昵称')
    birth = models.DateField(verbose_name=u'生日', null=True, blank=True)
    gender = models.CharField(max_length=6, choices=(('male', u'男'), ('female', u'女')), default='female',
                              verbose_name=u'性别')
    address = models.CharField(max_length=100, verbose_name=u'地址', default=u'')
    mobile = models.CharField(max_length=11, null=True, blank=True, verbose_name=u'手机号码')
    avatar = models.ImageField(max_length=100, upload_to=u'avatar/%Y/%m', default=u'avatar/default.png',
                               verbose_name=u'用户头像')

    class Meta:
        verbose_name = u'用户信息表'
        verbose_name_plural = verbose_name

    def __unicode__(self):
        return self.username

1.5 生成数据库表

在这里插入图片描述

1.6 数据库测试

在这里插入图片描述
在这里插入图片描述

1.7启动服务器

在这里插入图片描述

1.8 Admin站点管理

  • 综述

在这里插入图片描述

  • 自定义管理界面
    在这里插入图片描述
    在这里插入图片描述
  • 关联对象
    在数据设计中,有关联存在。例如添加班级时,直接将学生信息添加,可使用如下方式:
    在这里插入图片描述

布尔值显示问题:定义一个函数,将Bool值返回为需要的字段
页面类名称的显示:属性名.short_description = '需要显示字段名称'
在这里插入图片描述

  • 使用装饰器注册model
    删除注册语句:admin.site.register(Student,StudentAdmin)
    添加:@admin.register(Student)修饰StudentAdmin注册类
    在这里插入图片描述

1.9 视图的基本使用

  • 综述
    在这里插入图片描述
  • 定义视图
    在每个应用下的view.py文件里,定义视图;
from django.shortcuts import render
from django.http import HttpResponse
from . import models
# Create your views here.

def index(request):
     return HttpResponse('hello world!')
  • 配置URL
    修改与项目名同名的文件目录下的urls.py文件,引入app的url路径文件;
from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    # blog为app名称,进入项目后,首先匹配是哪个app,然后将该app的urls.py引入,直接到子应用的urls文件里匹配view。
    path('blog/', include(('blog.urls', 'blog'), namespace='blog'),),
    ]

在blog应用的目录下,创建一个urls.py的文件,用来匹配view;

from . import views
from django.urls import path

'''网页传来函数响应时,经判断是该应用下的函数index,
   在view文件里,找到名为index的函数,根据函数功能,返回对应消息或页面'''

urlpatterns = [
    path('', views.index)
]

1.10 模板的基本使用

在这里插入图片描述

  • 配置模板路径
 TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]

具体写一个页面的步骤:
在这里插入图片描述

  • 1.index.html
    在templates文件里创建html页面,用于接受从view返回的数据,并显示;
<head>
    <meta charset="UTF-8">
    <title>博客的主页面</title>
</head>
<body>

<h3>我的第一个模板文件,看我的啦!blog</h3>
{% for article in articles %}
    <a href="{% url 'blog:article_page' article.id %}">{{ article.title }}</a>
    <br/>
{% endfor %}
  • 2.view
    在模型里取出数据,传递给模板文件里的页面;
 def index(request):
    # 第三个参数是一个字典,主要作用将数值返回给前端
    # 使用时,直接用键名即可
    articles = models.Article.objects.all()
    return render(request, 'blog/index.html', {'articles': articles})
  • 3.注册url
 urlpatterns = [
    path('', views.index)
]

2. 项目创建

2.1 普通项目的建立

  1. pycharm创建
    打开Pycharm,新建Django项目,如果是普通项目的建立,可以创建一个新的interpreter,也可以使用已将存在的环境。
    注意:因为python项目下有很多依赖包,如果Install一直不成功的话,可以选择已经存在的interpreter。因为,本人也下载了jupyter,该项目的依赖包,大都下载成功,因此,我在创建新项目时,选择的jupyter的环境(在jupyter的安装目录下,选择python.exe)。

  2. cmd创建
    在合适位置创建一个文件夹,用来存放项目文件。然后进入该项目下,输入django-admin startproject Test,Test为Django项目名。
    在这里插入图片描述

2.2 pyhton虚拟环境

为每个项目创建独立的环境。
1.首先安装虚拟环境 pip install virtualenv
2.创建一个文件夹(virtual_envs_works),用来放虚拟环境目录。
3.切换到virtual_envs_works目录下,创建新的虚拟环境virtualenv 环境名在这里插入图片描述
4.下载虚拟环境管理工具,pip install virtualenvwrapper
5.配置环境变量,给WORKON_HOME 添加存储文件夹路径。在这里插入图片描述
6.在cmd命令行里,用workon命令,可以查看已经存在的文件。
7.workon project,可进入各项目的目录下,然后执行pip install 包名,即可引入依赖包。

注意:这里,虚拟环境的各个管理命令,可在印象笔记里查看。

2.3 项目文件注解

项目建立成功后,在总项目下,有一个名字与项目名称相同的文件夹,该文件为总的app管理,该文件里有settings和urls文件。

2.4 App的添加

在项目建立界面,可以直接选择APP的建立;
如果建立时,没有建立的话,可以打开项目,在tools里运行run manage.py,然后在命令行里输入startapp [ app名称],点击回车,就可以看见新增了一个名为app名称的文件夹;
注意:新添加的app必须在settings和urls文件里注册。
app的注册
app建立好后,点击该app,在新建一个名为template的文件夹,用来放html页面。
注意:因为每个项目都不止一个app,而每个app的html页面也会出现同名的情况。在Django机制里,当出现名称相同的html时,会按照在settings注册的顺序调用,为了避免该情况的出现,在app下新建立一个同名文件夹,再将template文件放在该文件下。

2.5 其他文件建立

根据需求,建立其他文件;
如:static文件夹,里面有css、js以及images文件。
upload文件夹:用户需要上传的数据。
logs:日志文件

2.6 数据库

1.在Django里,默认数据录为sqlite3。这里我们使用Mysql数据库,需要在settings文件里修改。

'NAME': 数据库ip下具体的一个库的名字,
'HOST':主机名或IP地址
'USER': 用户名
'PASSWORD': 数据库的密码,之前的我密码是空,试了几种eg'',NO找不来表示的方法,只好给数据    库设置了一个密码
'PORT':'3306' 端口号
**注意**:修改完成后run会出错,此时需要在命令行进入到该虚拟项目下,`pip3 install mysqlclient`安装数据库模块。

2.默认数据库表的迁移
在tools里运行run manage.py里,点击makemigrations回车,再点击migrate
注意:此时如果迁移失败,请检查Mysql版本,Django2以上不支持Mysql5版本。

2.7 Models.py:数据库表的创建

models文件是专为数据库表创建的,在文件里,定义类,类名即为表名,属性为表的字段。在Django中,定义了很多类型的字段,我们可以直接使用。
比如:在这里插入图片描述

注意:在实际的项目开发中,每个表之间都会存在关联,在运行的时候,会相互调用,这样有可能会出现死循环的情况,为了避免,我们建立一个专门进行调用的app,由他实现对各个表数据的管理。逻辑上,它比各个app高一级。但在项目上,他们属于同级。

1.User数据模型设计

在Django里,有已经设计好的用户表,我们在设计的时候可以直接继承。
注意:因为用到类系统自定义的类,需要在settings文件里注册。
在这里插入图片描述
User为文件名,UserProfile为用到自定义类的类名。

2.models数据模型设计

除了User App,还有其他的App,在这里仿照user建立的步骤依次建立。
注意:在数据模型设计中,会存在外键的可能,语句为

 user = models.ForeignKey(UserProfile, on_delete=models.CASCADE, verbose_name=u'用户')

在课程评论中,user是外键,在django2以上,需要添加on_delete=models.CASCADE,
参数说明

on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值
CASCADE:此值设置,是级联删除。
PROTECT:此值设置,是会报完整性错误。
SET_NULL:此值设置,会把外键设置为null,前提是允许为null。
SET_DEFAULT:此值设置,会把设置为外键的默认值。
SET():此值设置,会调用外面的值,可以是一个函数。

3.APP目录结构优化

在项目设计中,为了方便管理APP,建立了一个文件夹,存放所有的APP,可是,当某个APP需要引入其他APP的内容时,引入会出现问题,解决的方案有两种。

  • 1.将APP添加到Python的搜索目录下
    在settings文件里,添加设置,将apps添加到根目录的搜索下,然后在 INSTALLED_APPS中,将注册应用的前缀app删掉。然后右键apps文件夹,点击Sources Root。 在这里插入图片描述
    在这里插入图片描述
  • 2.将apps文件夹直接拖进与项目名称相同的文件夹里,比如你的项目名为izengzhi,项目里会有一个izengzhi的文件夹,这里是总目录,完成项目的设置等,移到该目录下,就会在引入其他app时,识别出来。

2.8 后台管理admin

1. admin的搭建

首先创建一个超级用户:在命令台输入creatsuperuser,默认的后台管理并没有我们创建的应用数据,此时需要在每个应用的admin.py文件里注册。
注册语句:

from . import models
admin.site.register(models.UserProfile)

在这里插入图片描述
在这里插入图片描述

2. xadmin的搭建

python2.0以上+Django2.0以上,需要在命令行输入:
注意:Django3版本会出现问题,建议将版本降至2.

pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2

安装完成后,需要修改部分设置。
第一步,在settings文件里注册

 'xadmin',
 'crispy_forms'

第二步,在urls文件里,将admin修改为xadmin

from django.urls import path
import xadmin

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('xadmin/', xadmin.site.urls),
]

成功后,管理员页面如下:
在这里插入图片描述

- Model数据表的注册(在Xadmin下)

1.首先将admin里的注册语句注释
2.在每个应用的文件下,创建一个名为adminx.py的python文件
3.在adminx文件里书册数据信息

class EmailVerifyCodeAdmin(object):
    # 页面显示属性
    list_display = ('code', 'email', 'send_type', 'send_time')
    # 过滤器
    list_filter = ('code', 'email', 'send_type', 'send_time')
    # 搜索
    search_fields = ('code', 'email')
xadmin.site.register(EmailVerifyCode, EmailVerifyCodeAdmin)

**注意:**在注册时,遇见外键的情况,需要写成外键所属数据表中的名字。例如,Cource和Lession,每个课程都有不同章节,因此Cource是Lession的外键。

class LessonAdmin(object):
    list_display = ('course', 'name', 'add_time')
    # 需要将course改成course__name
    list_filter = ('course__name', 'name', 'add_time')
    search_fields = ('course__name', 'name')

另外,还需将model文件里的代码

def __unicode__(self):
        return self.name

修改为:

 def __str__(self):
        return self.name
- 在Xadmin中几个常用的配置

1.修改后台主题样式
在adminx.py文件里配置

class BaseSettings(object):
    enable_themes = True
    use_bootswatch = True
xadmin.site.register(views.BaseAdminView, BaseSettings)

2.全局标题的配置

class GlobalSettings(object):
    site_title = u'爱增值后台管理系统'
    site_footer = u'小小慕公司'
    # 菜单样式(伸缩)
    menu_style = 'accordion'
xadmin.site.register(views.CommAdminView, GlobalSettings)

3.将主页面数据信息标题改为中文
结果如下:
在这里插入图片描述
方法:
1.在每个应用的apps文件里里添加verbose_name = u'课程信息'
2.在init 文件里添加default_app_config = 'izengzhi.apps.courses.apps.CoursesConfig'

3. 后台管理模块

之前建立了一个template文件夹放html文件,文件建立后,需要在全局配置的urls文件里配置,views文件里写响应函数。
在settings文件里配置静态文件的目录

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

- 网站首页

from django.views.generic import TemplateView
url('',TemplateView.as_view(template_name='index.html'), name='index'),

- 登录模块

首先添加html文件,然后在urls文件里注册,继续在views里写响应函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值