Python中Django框架使用总结

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容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
目录
相关文章
|
22天前
|
安全 前端开发 数据库
Python 语言结合 Flask 框架来实现一个基础的代购商品管理、用户下单等功能的简易系统
这是一个使用 Python 和 Flask 框架实现的简易代购系统示例,涵盖商品管理、用户注册登录、订单创建及查看等功能。通过 SQLAlchemy 进行数据库操作,支持添加商品、展示详情、库存管理等。用户可注册登录并下单,系统会检查库存并记录订单。此代码仅为参考,实际应用需进一步完善,如增强安全性、集成支付接口、优化界面等。
|
11天前
|
存储 SQL 数据采集
Django框架的表单验证和过滤机制的原理是什么?
Django框架的表单验证和过滤机制的原理是什么?
98 73
|
2月前
|
数据采集 存储 JSON
Python网络爬虫:Scrapy框架的实战应用与技巧分享
【10月更文挑战第27天】本文介绍了Python网络爬虫Scrapy框架的实战应用与技巧。首先讲解了如何创建Scrapy项目、定义爬虫、处理JSON响应、设置User-Agent和代理,以及存储爬取的数据。通过具体示例,帮助读者掌握Scrapy的核心功能和使用方法,提升数据采集效率。
154 6
|
11天前
|
JSON 安全 中间件
Python Web 框架 FastAPI
FastAPI 是一个现代的 Python Web 框架,专为快速构建 API 和在线应用而设计。它凭借速度、简单性和开发人员友好的特性迅速走红。FastAPI 支持自动文档生成、类型提示、数据验证、异步操作和依赖注入等功能,极大提升了开发效率并减少了错误。安装简单,使用 pip 安装 FastAPI 和 uvicorn 即可开始开发。其优点包括高性能、自动数据验证和身份验证支持,但也存在学习曲线和社区资源相对较少的缺点。
51 15
|
1月前
|
数据采集 中间件 Python
如何在Django框架中进行输入验证和过滤?
通过综合运用这些方法,可以在 Django 框架中有效地进行输入验证和过滤,提高应用的安全性和数据质量。同时,还可以根据具体的业务需求进一步扩展和定制验证逻辑。
121 64
|
8天前
|
关系型数据库 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,因其易学易用。
|
11天前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
49 7
|
2月前
|
搜索推荐 API 开发者
Django框架和Flask框架的适用场景分别是什么?
总体而言,Django 更适合需要全面功能和大规模开发的场景,而 Flask 则更适合灵活性要求高、小型项目或特定需求的开发。当然,具体的选择还应根据项目的具体情况、团队的技术能力和偏好等因素来综合考虑。在实际应用中,开发者可以根据项目的特点和需求,灵活选择使用这两个框架,或者结合它们的优势来构建更强大的 Web 应用程序。
144 64
|
2月前
|
开发框架 搜索推荐 数据可视化
Django框架适合开发哪种类型的Web应用程序?
Django 框架凭借其强大的功能、稳定性和可扩展性,几乎可以适应各种类型的 Web 应用程序开发需求。无论是简单的网站还是复杂的企业级系统,Django 都能提供可靠的支持,帮助开发者快速构建高质量的应用。同时,其活跃的社区和丰富的资源也为开发者在项目实施过程中提供了有力的保障。
139 62
|
2月前
|
开发者 数据库管理 Python
Django框架和Flask框架的区别
总体而言,Django 适合需要快速搭建大型应用的开发者,而 Flask 则更适合有特定需求和追求灵活性的开发者。
140 64

热门文章

最新文章