Python中Django框架使用总结

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Python中Django框架使用总结

【1】建立应用

① 建立应用

命令:

python manage.py startapp 应用名


其会生成如下文件:


admin.py :管理站点模型的声明文件,默认为空。


apps.py :应用信息定义文件。在其中生成了类Appconfig,类用于定义应用名等Meta数据。


migrations : 用于在之后定义引用迁移功能。


models.py : 添加模型层数据类的文件。


test.py :测试代码文件。


views.py :定义URL响应函数。如果遇到错误如No module named 'users',那么首先检测路径、包名是否有问题,然后检测是否在项目的settings.py中INSTALLED_APPS配置了我们的users。最后一定记得下面这行命令哦


#将我们自己定义的包加入到python搜寻环境变量当中
sys.path.insert(0,os.path.join(BASE_DIR,'apps'))

② 迁移同步

在修改完models.py中的字段,需要对数据表中结构进行修改的时候,在终端中执行以下迁移命令即可。

python manage.py makemigrations
python manage.py migrate

什么是迁移?把模型转化为对数据库的操作,这就是迁移

【2】Xadmin使用

官网地址:http://sshwsfc.github.io/xadmin/

GitHub地址:https://github.com/sshwsfc/xadmin


下载源码包压缩文件之后,我们可以解压这个压缩文件,获取到源码包。


① 将下载好的xadmin解压,复制里面的xadmin文件夹到我们的项目根目录当中


② 创建extra_apps放置第三方的app,将xadmin移动到我们这个extra_apps下

③ 将extra_apps mark为root_source


④ 将extra_apps在setting当中配置好搜索路径

#将我们自己定义的包加入到python搜寻环境变量当中
sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
sys.path.insert(0,os.path.join(BASE_DIR,'extra_apps'))


⑤ 打开cmd,进入虚拟环境,安装xadmin依赖包,依赖包的版本在xadmin文件夹下:requirements.txt,在其中有一个包版本改成2.1 django-formtools==2.1,否则版本太低,拉不起来。


pip install -r requirements.txt -i https://pypi.douban.com/simple/,这个需要在requirements.txt文件的当前路径下哦。

pip  install  -r  requirements.txt   -i  https://pypi.douban.com/simple/

⑥ 将xadmincrispy_forms添加到我们的installed_apps

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users.apps.UsersConfig',
    'courses.apps.CoursesConfig',
    'orgs.apps.OrgsConfig',
    'operations.apps.OperationsConfig',
    'xadmin',
    'crispy_forms',
    'captcha',
    'DjangoUeditor',
]


⑦ urls.py文件中将我们本来的admin注释掉改为我们xadmin url(r'^xadmin/', xadmin.site.urls),

⑧ 再次执行迁移同步,目的是为了生成xadmin所依赖的表

最后创建超级管理员,去验证xadmin是否安装成功。


这里需要说明的是,我这里是将xadmin解压到了python安装目录的Lib下面,并在如下路径下执行操作命令 pip install -r requirements.txt -i https://pypi.douban.com/simple/


【3】一些错误

① No module named ‘widgets’


DjangoUeditor是基于Python 2.7的,对Python3的支持有问题。导致widgets.py文件出错,不能import。解决方法为修改widgets.py或者采用网上修改好的版DjangoUeditor3。


github搜DjangoUeditor3,github地址克隆到本地,复制文件夹里面的DjangoUeditor文件夹,放到虚拟环境下python3/Lib/site-packages/文件夹下,或者直接放在你的Django项目下。

最后记得重启Django

python manage.py runserver


__init__() missing 1 required positional argument: 'on_delete'

在django2.0后,定义外键和一对一关系的时候需要加on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错:

# 添加on_delete=models.CASCADE
cityinfo = models.ForeignKey(CityInfo,verbose_name="所在城市",on_delete=models.CASCADE)

on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五个可选择的值


CASCADE:此值设置,是级联删除。

PROTECT:此值设置,是会报完整性错误。

SET_NULL:此值设置,会把外键设置为null,前提是允许为null。

SET_DEFAULT:此值设置,会把设置为外键的默认值。

SET():此值设置,会调用外面的值,可以是一个函数。③ cannot import name ‘six’ from 'django.utils’

pip install six

然后进入python安装目录下的site-packages,将six.py 复制到 django/utils即可。

或者降低版本:pip install django==2.2.6


或者修改

from django.utils import six  
# 修改为
import six

④ No module named 'django.core.urlresolvers’

django2.0 把原来的 django.core.urlresolvers 包 更改为了 django.urls包,所以我们需要把导入的包都修改一下就可以了。


即修改为如下:

from django.urls import NoReverseMatch, reverse

⑤ dashboard.py报错TypeError: init() takes 1 positional argument but 6 were given

# 原始
forms.Field.__init__(self, required, widget, label, initial, help_text,
                             *args, **kwargs)
# 修改为
forms.Field.__init__(self)

⑥ cannot import name 'python_2_unicode_compatible'

  from django.utils.encoding import python_2_unicode_compatible, smart_text
ImportError: cannot import name 'python_2_unicode_compatible'

修改为:

from six import python_2_unicode_compatible
from django.utils.encoding import smart_text

⑦ cannot import name 'pretty_name’

from django.forms.forms import pretty_name
ImportError: cannot import name 'pretty_name'

修改为:

from django.forms import forms


⑧ No module named 'django.contrib.staticfiles.templatetags’

 from django.contrib.staticfiles.templatetags.staticfiles import static
ModuleNotFoundError: No module named 'django.contrib.staticfiles.templatetags'

修改为:

from django.templatetags.static import static


⑨ cannot import name 'login’

from django.contrib.auth.views import login
ImportError: cannot import name 'login'


修改为:

from django.contrib.auth import authenticate, login, logout


⑩cannot import name 'FieldDoesNotExist’


 

  from django.db.models.fields import FieldDoesNotExist
ImportError: cannot import name 'FieldDoesNotExist'

修改为:

from django.core.exceptions import FieldDoesNotExist


(11)cannot import name 'QUERY_TERMS’

 from django.db.models.sql.query import LOOKUP_SEP, QUERY_TERMS
ImportError: cannot import name 'QUERY_TERMS'

修改为:

from django.db.models.sql.query import LOOKUP_SEP, Query


(12)No module named 'django.contrib.formtools’


from django.contrib.formtools.wizard.storage import get_storage
ModuleNotFoundError: No module named 'django.contrib.formtools'

解决:

# 卸载旧版本
pip uninstall django-formtools
# 安装新版本
pip install django-formtools
 from django.contrib.auth.views import password_reset_confirm
ImportError: cannot import name 'password_reset_confirm'

修改:

from django.contrib.auth.views import PasswordResetForm

(14) AttributeError: ‘Settings’ object has no attribute 'MIDDLEWARE_CLASSES’


修改xadmin\plugins\language.py", line 24,

if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE_CLASSES:


修改为:

if settings.LANGUAGES and 'django.middleware.locale.LocaleMiddleware' in settings.MIDDLEWARE:
• 1

(15) cannot import name 'DEFAULT_FORMATS’



  from import_export.admin import DEFAULT_FORMATS, SKIP_ADMIN_LOG, TMP_STORAGE_CLASS
ImportError: cannot import name 'DEFAULT_FORMATS'

修改:

from import_export.formats.base_formats import DEFAULT_FORMATS
from import_export.admin import  ImportMixin


(16) No module named 'django_redis’

Could not find backend 'django_redis.cache.RedisCache': No module named 'django_redis'


解决:

pip install  django_redis


(17) 'Specifying a namespace in include() without providing an app_name '


Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the

included module, or pass a 2-tuple containing the list of patterns and app_name instead.

# 原先格式
url(r'^users/',include('users.urls',namespace='users')),
# 修改后格式
url(r'^users/',include(('users.urls',"users"),namespace='users')),

(18) django.db.models.AutoField

xadmin.UserWidget: (models.W042) Auto-created primary key used when not defining a primary key type, by default ‘django.db.models.AutoField’.


HINT: Configure the DEFAULT_AUTO_FIELD setting or the XAdminConfig.default_auto_field attribute to point to a subclass of AutoField, e.g. ‘django.db.models

.BigAutoField’.

settings文件添加如下内容:

DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'



(19) 自定义错误页面


?: (urls.E007) The custom handler404 view ‘users.views.handler_404’ does not take the correct number of arguments (request, exception).


原始配置:

handler404 = 'users.views.handler_404'
handler500 = 'users.views.handler_500'
def handler_404(request):
    return render(request,'handler_404.html')
def handler_500(request):
    return render(request,'handler_500.html')


修改函数为如下:

def handler_404(request,exception=None):
    return render(request,'handler_404.html',status=404)
def handler_500(request,exception=None):
    return render(request,'handler_500.html',status=500)


(20) ‘staticfiles’ is not a registered tag library. Must be one of:

'staticfiles' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_urls
cache
crispy_forms_field
crispy_forms_filters
crispy_forms_tags
crispy_forms_utils
i18n
l10n
log
static
tz
xadmin_tags


解决:

{% load staticfiles %}
改成
{% load static %}


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
8天前
|
机器学习/深度学习 设计模式 测试技术
Python 高级编程与实战:构建自动化测试框架
本文深入探讨了Python中的自动化测试框架,包括unittest、pytest和nose2,并通过实战项目帮助读者掌握这些技术。文中详细介绍了各框架的基本用法和示例代码,助力开发者快速验证代码正确性,减少手动测试工作量。学习资源推荐包括Python官方文档及Real Python等网站。
|
2月前
|
人工智能 开发者 Python
Chainlit:一个开源的异步Python框架,快速构建生产级对话式 AI 应用
Chainlit 是一个开源的异步 Python 框架,帮助开发者在几分钟内构建可扩展的对话式 AI 或代理应用,支持多种工具和服务集成。
264 9
|
2月前
|
关系型数据库 API 数据库
Python流行orm框架对比
Python中有多个流行的ORM框架,如SQLAlchemy、Django ORM、Peewee、Tortoise ORM、Pony ORM、SQLModel和GINO。每个框架各有特点,适用于不同的项目需求。SQLAlchemy功能强大且灵活,适合复杂项目;Django ORM与Django框架无缝集成,易用性强;Peewee轻量级且简单,适合小型项目;Tortoise ORM专为异步框架设计;Pony ORM查询语法直观;SQLModel结合Pydantic,适合FastAPI;GINO则适合异步环境开发。初学者推荐使用Django ORM或Peewee,因其易学易用。
128 4
|
2月前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
113 7
|
2月前
|
JSON 安全 中间件
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
138 15
|
2月前
|
存储 SQL 数据采集
Django框架的表单验证和过滤机制的原理是什么?
Django框架的表单验证和过滤机制的原理是什么?
111 73
|
2月前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
3月前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
135 2
|
3月前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
142 7
|
3月前
|
敏捷开发 测试技术 持续交付
自动化测试之美:从零开始搭建你的Python测试框架
在软件开发的马拉松赛道上,自动化测试是那个能让你保持节奏、避免跌宕起伏的神奇小助手。本文将带你走进自动化测试的世界,用Python这把钥匙,解锁高效、可靠的测试框架之门。你将学会如何步步为营,构建属于自己的测试庇护所,让代码质量成为晨跑时清新的空气,而不是雾霾中的忧虑。让我们一起摆脱手动测试的繁琐枷锁,拥抱自动化带来的自由吧!

热门文章

最新文章