Django 基础篇

django 基础篇

基本工具

env虚拟机 - virtualenvwrapper-win

安装: pip install virtualenvwrapper-win基本指令:创建: mkvirtualenv <虚拟机名称>列表: workon进入: workon <虚拟机名称>删除: rmvirtualenv <虚拟机名称>

python

版本: 3.7.4 官方载点

django

版本: 3.1 官方文档安装: pip install django==3.1

基本概念

Model: 与资料库栏位对映Template: 可于一般HTML内加入for、if等等判断View: 逻辑编写
http://img2.58codes.com/2024/20132538WUnMw26Z7r.jpg

专案创建

django-admin startproject <专案名称>python manage.py runserve 开启本地伺服器,预设 8000 port
  目录结构  |   manage.py  \---djangoAPI          asgi.py          settings.py          urls.py          wsgi.py          __init__.py
manage.py: django命令包 参考asgi.py: ASGI兼容的Web服务器上的入口settings.py: 项目配置文件(DB、金钥、引用apps...)urls.py: 主要路由器(各功能urls可于此集中)wsgi.py: WSGI兼容的Web服务器上的入口__init__.py: 一个空文件,告诉python这个目录是一个python包 参考

创建功能模组

python manage.py startapp <功能名称>
  目录结构  |   manage.py  \---testSetting      |   admin.py      |   apps.py      |   models.py      |   tests.py      |   views.py      |   __init__.py      |   urls.py(自行定义)      |      \---migrations              __init__.py
admin.py: 管理员设置migrations: 资料库创建纪录models.py: 资料库模型views.py: 功能逻辑urls.py: 该功能路由

基础配置

路由

官方参考

于各功能模组中新增 urls.py 档案
  from django.urls import path  from . import views  urlpatterns = [    path('', views.index, name = 'index'),  ]
专案 路由载入 功能模组
  from django.urls import path, include  urlpatterns = [      path('testSetting/', include('testSetting.urls'))  ]
于网址列输入时,须以前缀表示EX: 127.0.0.0.1/testSetting/,如此一来在拥有很多个app时,如果有相同的views.index就能够区分

DB

多DB配置官方参考

# 于setting.py中配置# Database 路由连线设置DATABASES = {  # 预设sqlite  'default': {    'ENGINE': 'django.db.backends.sqlite3',    'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),  },  # MSSQL连线配置  'testSetting': {    'ENGINE': 'sql_server.pyodbc',    'NAME': '<DB名称>',    'USER': '<使用者>',    'PASSWORD': '<密码>',    'HOST': '<IP>',    'PORT': '<port>',    'OPTIONS': {      'driver':'SQL Server Native Client 11.0',      'MARS_Connection': True,    }  }}# Database 路由# database_router.DatabaseAppsRouter 需自行新增,可参考官方配置DATABASE_ROUTERS = ['<projectName>.database_router.DatabaseAppsRouter']DATABASE_APPS_MAPPING = {  'testSetting': 'testSetting'}

model 範例

# 这是一个最基本的範例class test(models.Model): # 继承models    testTest = models.CharField(max_length=5) # 对应资料表栏位    class Meta:        managed = False        app_label = 'testSetting' # DB路由的名称        db_table = "test" # 资料表名称
Meta.managed = False 代表进行makemigration动作时,不进行迁移,这在已经存在的资料表非常好用

DB事务所

当进行一连串的新增、修改资料时,常常希望全部成功在一次更新。
例如银行交易,A转帐给B,需要A扣款与B入帐同时成功,如果A扣款成功,但B帐号冻结等等,则A的钱就不见了,这就是我们需要解决的问题。
# 功能实现 - 使用装饰器from django.db import transaction # 载入回滚工具@transaction.atomic(using="DBName")def atomicTest():    # 设定回滚位置,如果已下功能有失败的部份,就会回到这个储存点    sid = transaction.savepoint(using="DBName")    try:        # 此处执行修改、新增DB...        # 因为使用了atomic修饰词,所以DB不会自动提交commit(即不会修正、新增...)        # 送出事务commit(此处送出,才算真的成功)        transaction.savepoint_commit(sid, using="DBName")    except ValueError as e:        # 自定义错误,将状态回滚到sid(储存点)        transaction.savepoint_rollback(sid, using="DBName")    except Exception as e:        # 未知错误,将状态回滚到sid(储存点)        transaction.savepoint_rollback(sid, using="DBName")

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章