Django实例入门(mac端操作)

以创建图书管理项目为例子: 蓝色 为自定义名称; 红色 为内置命令

1.进入虚拟环境 
  • workon  py_test(虚拟环境名)
2.创建项目
2.1创建项目目录
  • cd Desktop/
  • mkdir pytest
  • cd pytest
2.2创建项目
  • django-admin startproject test1(项目名称)
2.2.1查看项目结构
  • cd test1
  • tree
2.3创建应用(路径在Deskto/pytest/test1/)
  • python manage.py startapp booktest(应用名)
3.用pycharm配置文件
3.1修改settings.py(路径在test1/settings.py)
3.1.1新增应用 
  • INSTALLED_APPS下添加应用的名称’booktest'
  • 配置完应用后可进入交互模式:python manage.py shell
3.1.2本地化
  • LANGUAGE_CODE = 'zh-hans' #使用中国语言
  • TIME_ZONE = 'Asia/Shanghai' #使用中国上海时间
3.1.3启动项目
  • python manage.py runserver #轻量级服务器,用于测试阶段
3.2可配置sql数据库的连接   
  • DATABASES = {
       'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'test1', #数据库名字,
            'USER': 'root', #数据库登录用户名
            'PASSWORD': 'mysql', #数据库登录密码
            'HOST': 'localhost', #数据库所在主机
            'PORT': '3306', #数据库端口
            }
        }
  • 创建对应的sql数据库create database test1 charset=utf8;
  • 在__init__.py文件里添加
    import pymysql
    pymysql.install_as_MySQLdb()

4.创建模型
4.1在booktest里的models.py里定义模型的属性
  • from django.db import models
  • 属性=models.字段类型(选项)

4.1.1字段类型

django.db里的models 包,字段类型如下:
类型 描述
AutoField
自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性。
BooleanField
布尔字段,值为TrueFalse
NullBooleanField
支持NullTrueFalse三种值。
CharField(max_length=最大长度)
字符串。参数max_length表示最大字符个数。
TextField
大文本字段,一般超过4000个字符时使用。
IntegerField 整数
DecimalField(max_digits=None, decimal_places=None)
十进制浮点数。参数max_digits表示总位。参数decimal_places表示小数位数。
FloatField 浮点数。参数同上
DateField([auto_now=False, auto_now_add=False])
日期。
1)参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于"最后一次修改"的时间戳,它总是使用当前日期,默认为false
2) 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false
3)参数auto_now_addauto_now是相互排斥的,组合将会发生错误。
TimeField
时间,参数同DateField
DateTimeField
日期时间,参数同DateField
FileField 上传文件字段。
ImageField
继承于FileField,对上传的内容进行校验,确保是有效的图片。

4.1.2选项

通过选项实现对字段的约束,选项如下:
选项名 描述
default 默认值。设置默认值。
primary_key
若为True,则该字段会成为模型的主键字段,默认值是False,一般作为AutoField的选项使用。
unique
如果为True, 这个字段在表中必须有唯一值,默认值是False
db_index
若值为True, 则在表中会为此字段创建索引,默认值是False
db_column 字段的名称,如果未指定,则使用属性的名称。
null
如果为True,表示允许为空,默认值是False
blank
如果为True,则该字段允许为空白,默认值是False
4.1.3定义模型BookInfo;HeroInfo
    #定义图书模型类BookInfo
    class BookInfo(models.Model):
        btitle = models.CharField(max_length=20)#图书名称
        bpub_date = models.DateField()#发布日期
        bread = models.IntegerField(default=0)#阅读量
        bcomment = models.IntegerField(default=0)#评论量
        isDelete = models.BooleanField(default=False)#逻辑删除

    #定义英雄模型类HeroInfo
    class HeroInfo(models.Model):
        hname = models.CharField(max_length=20)#英雄姓名
        hgender = models.BooleanField(default=True)#英雄性别
        isDelete = models.BooleanField(default=False)#逻辑删除
        hcomment = models.CharField(max_length=200)#英雄描述信息
        hbook = models.ForeignKey('BookInfo')#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
  • 可在个项类中配置魔法属性(返回相应的属性名称替代返回的object)
     def __str__(self):
         return  self.XXX(自定义模型内属性名称如:btitle,hname)
4.2生成迁移文件
  • python manage.py makemigrations
  • python manage.py migrate
4.2.1可进入交互模式shell( 增,删,改,查
  • python manage.py shell
  • from booktest.models import BookInfo,HeroInfo(从模块导入项目)
  • from datetime import date
    b = BookInfo() # 定义一个 BookInfo 类的对象
    b.btitle =' 天龙八部 ' # 定义 b 对象的属性并赋值
    b.bpub_date = date(1990,10,11)
    b.save() # 才会将数据保存进数据库
    b.delete()
    b1 = BookInfo.objects.get(id=1)
    b1.btilte = ‘XXX’
    b1.bpub_date = date(XXXX,XX,XX)
    b1.save()
  • 4.2.2查
        使用下面的命令可以实时查看 mysql 的日志文件 :
        sudo tail -f /usr/local/mysql/data/ Floral deMacBook-Pro.log
        通过 模型类 .objects 属性可以调用如下函数,实现对模型类对应的数据表的查询。
函数名 功能 返回值 说明
get
返回表中满足条件的一条且只能有一条数据。
返回值是一个模型类对象。
参数中写查询条件。
2)查询不到数据,则抛异常:DoesNotExist
all 返回模型类对应表格中的所有数据。
返回值是QuerySet类型
查询集
filter 返回满足条件的数据。
返回值是QuerySet类型
参数写查询条件。
exclude 返回不满足条件的数据。
返回值是QuerySet类型
参数写查询条件。
order_by 对查询结果进行排序。
返回值是QuerySet类型
参数中写根据哪些字段进行排序。
5.配置URL
5.1修改test1里的urls.py文件
  • urlpatterns=[url(r'^',include('booktest.urls’)),]#include、url函数从django.conf.urls模块导入
5.2在booktest里新建urls.py文件
  • from django.conf.urls import url
  • from booktest import views#导入booktest里的views.py视图模块文件
    urlpatterns=[url(r’^index$’,views.index),#匹配视图文件里的主页index函数, 注意正则匹配
        url(r’^delete (\d+) $’,views.delete),]#匹配视图文件里的定义的delete函数
5.3在booktest里的views.py文件里定义相关函数
  • from django.shortcuts import render, redirect(重定向)
  • from booktest.models import *
  • from datetime import date
  • #from django.http import HttpResponse,HttpResponseRedirect(重定向)
    def index (request):
        books = BookInfo.objects.all()
        #return  HttpResponse(‘XXXX’)
         return render(request , 'booktest/index.html' , { 'books' : books})#后面需配置index.html文件
    
    def delete (request , bid):#bid为5.2中网页进行正则匹配时传递的参数 (\d+)
        book = BookInfo.objects.get( id =bid)
        book.delete()
         #return HttpResponseRedirect ’/ index’)
         return redirect( ‘/ index )#此处的重定向地址’/index’要与booktest里的urls.py正则匹配要对上
6.建立网页模版文件
6.1创建模版文件
  • 在test1目录下创建templates/booktest文件夹
  • 在booktest文件夹里创建模版文件index.html
6.2配置test1目录下的settings.py文件
  • 添加模版路径
    TEMPLATES = [
        {
             'BACKEND' : 'django.template.backends.django.DjangoTemplates' ,
             'DIRS' : [ os.path.join(BASE_DIR , ' templates ' ) ] ,
            
        }
    
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [os.path.join(BASE_DIR , 'static ) ]
  • 配置其他内容
# 富文本编辑器配置
TINYMCE_DEFAULT_CONFIG = {
    'theme' : 'advance' ,
    'width' : 600 ,
    'height' : 400 ,
}

# 发送邮件配置
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# smpt服务地址
EMAIL_HOST = ' smtp.163.com '
EMAIL_PORT = 25
# 发送邮件的邮箱
EMAIL_HOST_USER = ' [email protected] '
# 在邮箱中设置的客户端授权密码
EMAIL_HOST_PASSWORD = 'smartli123'
# 收件人看到的发件人
EMAIL_FROM = '天天< [email protected] >'
# Django的缓存配置
CACHES = {
    "default" : {
        "BACKEND" : "django_redis.cache.RedisCache" ,
        "LOCATION" : " redis://172.16.179.130:6379/9 " ,
        "OPTIONS" : {
            "CLIENT_CLASS" : "django_redis.client.DefaultClient" ,
        }
    }
}

# 配置session存储
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

6.3设计网页模版内容(根据需求)
  • 首页模版
     html>
     lang="en">
    
         charset="UTF-8">
        </span><span style="font-family:'Courier New';">图书列表</span><span style="color:rgb(232,191,106);font-family:'Courier New';">
    
    
    

图书列表

    
        {% for book in books %}#views下的index函数中定义的books可通过{'books': books}传递给指定的html文件
        
  • {{ book.btitle }}-- href="/delete{{ book.id }}/">删除
  • #views下的delete函数bid参数获取book.id
            {% endfor %}
        
        
        
    1. 模板变量使用:{{ 模板变量名 }}
    2. 模板代码段:{%代码段%}
    3. for循环:
                {% for i in list %}# list 不为空时执行的逻辑
                {% empty %}# list 为空时执行的逻辑
                {% endfor %}#for循环结束









        


    你可能感兴趣的:(web框架)