【1021 | Day 49】Django框架应用

Django框架深入应用

1. 前期回顾

我们前期基于wsgiref、urls和views的映射关系简单介绍了web的框架,之后初步介绍了Django的使用。

现在我们将真正用Django实现一个项目的功能框架,接下来,先简单介绍一下整体的框架。

开始吧!

2. 登录功能

我们在完成一个完整的项目之前,首先通过实现单个功能认识整个项目的框架与各个文件的作用,比如登录功能。

  • 第一步 —— 创建Django项目

  • 第二步 —— urls.py文件建立关系

  • 第三步 —— views.py文件定义视图函数(某个功能)

  • 第四步 —— 项目名内的settings.py文件配置静态文件

    • 解析第一步:前三步是基本步骤,第四步因为登录功能需要区分浏览器的POST/GET命令,之后校验用户的用户名和密码,返回页面。

    • 解析第二步:返回的页面用到了redirect(重定向)render(request,'xx.html', {{'msg': ...}})命令。那么页面的css文件可以使用bootstrap,img等等,就需要配置静态文件。

  • 第五步 —— 用户信息与数据库校验与存放

    • 解析第一步:连接数据库,settings.py配置数据库(数据库文件迁移)
  • 第六步 —— 利用models.py创建数据库表(相当于Django的orm)

    • 解析第一步:orm的优点我们已经知道,但是也有缺点。就是orm的封装性太好,使得使用效率降低。
  • 第七步 —— 表字段及数据的增删查改

2.1 创建Django项目

  • 命令行:django-admin startproject django项目名称
  • pycharm创建:new project ——>Django

2.2 建立映射关系(urls.py)

for example:

urlpatterns = [    
    url(r'^admin/', admin.site.urls),                    
    url(r'^register/', views.register),           
    url(r'^login/', views.login),    
    url(r'^get_time/', views.get_time),    
    url(r'^get_user/', views.get_user),    
    url(r'^get_db/', views.get_db),
]

2.3 定义视图函数(views.py)

一一对应urls.py:

def admin(request):
    pass

def register(request):
    pass

def login(request):
    pass

def get_time(request):
    pass

def get_user(request):
    pass

def get_db(request):
    pass

2.4 静态文件配置(settings.py)

STATIC_URL = '/static/'  #接口访问密码,html导入静态文件样式的前缀
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),  #静态文件夹的名字
)

2.5 数据库连接与校验(涉及render / redirect / HttpResponse)

2.5.1 DATABASE配置

第一步:settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'np1',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

第二步:__init__.py

import pymysql
pymysql.install_as_MySQLdb()

注意一:原先的pymysql的另一种形式,在Django的settings.py里面有默认连接数据库配置。

注意二:数据库的数据迁移 —— python manage.py dumpdata —— data.json(和migrations/migrate做区别)

2.5.2 render/redirect/Httpresponse

  • redirect(重定向) —— 跳转页面
  • render(request,'xx.html', {{'msg': ...}}) —— 传递数据/网址/信息等
  • HttpResponse() —— 返回字符串

注意:Django返回的都是HttpResponse的对象,因为这里的HttpResponse是一个类,上面三个默认继承这个类。

2.6 Django的orm(models.py)

第一步:Userinfo表

class Userinfo(models.Model):
    username = models.CharField(max_length=64, null=True)
    password = models.IntegerField()

注意:不创建库,只创建表。

第二步:生成表单语句

  • 在命令行进行操作
    • python manage.py makemigrations
    • python manmge.py migrate

注意:每一次增删查改都要来一次

2.7 表单的增删改查

2.7.1 增

  • 单条数据:

    • 方法一 : models.表名.objects.create(字段1=值1,字段2=值2........)

    • 方法二:dict = {'字段1':值,'字段2':值.........}

      models.表名.objects.create(dict)

  • 多条数据:

    info = [
         models.UserInfo(name='root1', age=34, ut_id=1),
         models.UserInfo(name='root2', age=35, ut_id=2),
         models.UserInfo(name='root3', age=36, ut_id=1),
         models.UserInfo(name='root4', age=37, ut_id=3),
         models.UserInfo(name='root5', age=32, ut_id=1),
    ]
    models.UserInfo.objects.bulk_create(info)

2.7.2 删

models.表名.objects.filter(满足的条件).delete()

2.7.3 改

models.表名.objects.filter(满足的条件).update(name='lll', age=23)

2.7.4 查

models.UserType.objects.all().values()   #表A的ud关联表b

2.7.5 有子健关系的查询正向查询(通过A表中的ud查到表b的id)

  • 方法一:models.A.objects.all().values('ud__id')

  • 方法二:

    res = models.A.objects.all()
    for a in res:
        print(a.ud.id)

2.7.6 有子健关系的查询返向查询(通过b表中的查到a表ID)

  • 方法一:models.B.objects.all().values('A__id')

  • 方法二:

    res = models.B.objects.all()
    for b in res:
        print(b.a_set.id) #### 表名小写_set

猜你喜欢

转载自www.cnblogs.com/fxyadela/p/11717584.html