6.1-Django入门

一、Django入门

1.1基本概念
1.2创建环境与app项目

安装依赖包

pip install django==2.0.1 -i https://mirrors.ailiyun.com/pypi/simple

进入“终端”CMD命令,通过django-admin命令创建django项目

[django]命令
    check
    compilemessages
    createcachetable
    dbshell
    diffsettings
    dumpdata
    flush
    inspectdb
    loaddata
    makemessages
    makemigrations
    migrate
    runserver
    sendtestemail
    shell
    showmigrations
    sqlflush
    sqlmigrate
    sqlsequencereset
    squashmigrations
    startapp
    startproject
    test
    testserver
django-admin startproject helloDjango   创建一个helloDjango项目

通过django-admin命令创建app应用

django-admin startapp mainapp

在一个Django项目中,存在很多app应用(模块),创建好的app需要注册到主工程中(settings.py)

1.3django项目结构

项目结构如下:

helloDjango
      |--helloDjango   主工程目录
            |----setting.py   #设置文件,数据库连接,app注册、中间件及模板配置
            |----urls.py  #总路由
            |----wsgi.py  #Django实现wsgi得脚本
            |----__int__.py  
      |--mainapp  应用模块(主)
              __int__.py
              admin.py     #后台管理配置脚本
              models.py    #数据模型类声明所在脚本
              view.py      #声明当前应用得视图处理函数或类
              urls.py      #自己增加得当前应用模块的子路由
              tests.py     #当前应用模块的单元测试类
              apps.py      #声明当前应用的基本信息
      |--manage.py     WEB应用的启动脚本,项目工程的入口
1.4django请求流程
#1.到urls分发器 (总urls.py 到子路由)
#2.urls分发器根据路由规则(正则)分发到views
#3.views去调用Model,交互数据
#4.views将数据渲染到模板中
#5.模板呈现给用户

二、数据库连接与ORM模型

2.1数据库连接配置

默认是sqlite3数据库,在使用ORM模型之前,需要先生成迁移文件,在执行迁移命令,在数据库中生成这些模型对应的表。

  • 先生成迁移文件
python manage.py makemigrations
  • 开始迁移(生成表,修改表,删除表)
python manage.py migrate

【注意】:一但生成了迁移文件并且迁移成功之后,不要删除迁移文件。

2.2初步使用ORM模型

定app模块中的models.py一个用户(客户)模型

from django.db import models

class UserEntity(models.Model):
    # 默认情况下会自动创建id主键
    name = models.CharField(max_length=20)
    age = models.IntegerField(default=0)
    phone = models.CharField(max_length=11)
    class Meta:
        # 指定当前模型类映射成哪一个表
        db_table = 'app-user'

模型创建完成后,先后执行生成迁移文件和迁移

2.3CURD
查询
userEntity.objects.all()  #查询所有
UserEntity.objects.get(pk=id)   #根据主键值查询一个实体对象
增加或更新
    u1 = UserEntity()
    u1.name = '向佳杰'
    u1.age = '19'
    u1.phone = 18200244902
    #保存模型对象
    u1.save()
def add_user(request):    # 从GET请求中读取数据    # request.GET.get('name')    # request.GET是一个dict字典类型,保存的是查询参数    name = request.GET.get('name', None)    age = request.GET.get('age', 0)    phone = request.GET.get('phone', None)    # 验证数据是否完整    if not all((name, age, phone)):        return HttpResponse('<h3 style="color:red">请求参数不完整</h3>', status=400)    u1 = UserEntity()    u1.name = name    u1.age = age    u1.phone = phone    u1.save()    return redirect('/user/list')
删除
u=UserEntity.objjects.get(1)u.delete  #删除
def delete_user(request):    # 查询参数有id    reqId = request.GET.get('id')    # 验证id是否存在    if reqId:        try:            user = UserEntity.objects.get(id=reqId)            user.delete()            html = """            <p> %s 删除成功,三秒后自动跳转到<a href="/user/list">列表</a></p>            <script>              setTimeout(function(){                  open('/user/list', target='_self');               }, 3000)            </script>            """ % reqId            return HttpResponse(html)        except:            return HttpResponse('%s不存在' % reqId)
更新
u=UserEntity.objjects.get(3)u.name='小杰'u.save()   #更新
def update_user(request):    # 查询参数有id,name,phone    reqId = request.GET.get('id', None)    reqName = request.GET.get('name', None)    reqPhone = request.GET.get('phone', None)    if not reqId:        return HttpResponse('id参数必须提供', status=400)    # 通过模型查询id的用户是否存在(表中的数据(记录)是否存在)    try:        # Model类.objects.get()可能会报异常--尝试捕获        dbUser = UserEntity.objects.get(id=reqId)        if any([reqName, reqPhone]):  # name或phone任意一个存在即可            if reqName:                dbUser.name = reqName            if reqPhone:                dbUser.phone = reqPhone            dbUser.save()            return redirect('/user/list')        return HttpResponse('参数不正确', status=404)    except:        return HttpResponse('%s的用户是不存在的' % reqId, status=404)

三、Admin的site站点配置

from django.db import models# Create your models here.# 客户的用户表class UserEntity(models.Model):    name = models.CharField(max_length=20, verbose_name='账号')    age = models.IntegerField(default=0, verbose_name='年龄')    phone = models.CharField(max_length=11, verbose_name='手机号',                             blank=True,  # 站点的表单字段值可以为空                             null=True)   # 数据表的字段可以是null值    # 把对象转换为名字    def __str__(self):        return self.name    class Meta:        # 设置表名        db_table = 'app-user'        verbose_name = '客户管理'        # 设置复数的表示方式        verbose_name_plural = verbose_name

四、综合案例-水果管理

3.1模型设计

# Fruit 水果模型类 (name,price,source,ctae_type_id)class FruitEntity(models.Model):    name = models.CharField(max_length=20,                            verbose_name='水果名')    price = models.FloatField(verbose_name='价格')    source = models.CharField(max_length=30,                              verbose_name='原产地')    category = models.ForeignKey(CateTypeEntity,                                 on_delete=models.CASCADE)    def __str__(self):        return self.name + "-" + self.source    class Meta:        db_table = 't_fruit'        verbose_name = '水果表'        verbose_name_plural = verbose_name# FruitImage 水果图片模型(friut_id,url,width,height,name)# CateType 水果分类(name,order_num)# 水果分类模型class CateTypeEntity(models.Model):    name = models.CharField(max_length=20,                            verbose_name='分类名')    order_num = models.IntegerField(verbose_name='排序')    def __str__(self):        return self.name    class Meta:        db_table = 'app-category'        ordering = ['-oder_num']  # 指定排序字段,-表示降序# Store 水果商店(name,name,boss_name,phone,address,city,(lat, lon #经纬度))# Storedetail 水果商店的详情
3.1模板的基本使用

循环语句块

{% for item in items %}{% endfor %}

分支循环

{% if 条件表达式 %}{% endif %}

变量

{{ 变量名 }}

在views.py视图函数中,渲染模板

return render(request,'fruit/list.html', locals())
3.2页面设计
{% block name %}{% endblock %}
{% extends "base.html" %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值