# django **Repository Path**: scboy520/django ## Basic Information - **Project Name**: django - **Description**: python django4.0 学习之路,django后台优化、django+swagger 手机微信同号,需要帮助的@我 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: https://www.dyrx.net - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2022-09-17 - **Last Updated**: 2023-07-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 欢迎加我微信13548266472交流学习,共同进步 # 从虚拟环境中导出项目用到的python第三方库:方便移植到其他服务器 ``` pip freeze > requirements.txt ``` 导出的requirements.txt文件存放在您命令提示符控制面板所在的目录,文件的名字可以自定义。 执行以下命令,安装python第三方库: ``` pip install -r requirements.txt ``` ------------------------------------ # 启动项目 (最后更新时间 20221103) 启动项目前,请确认虚拟环境是否创建和激活,mysql数据库信息(记得启动Mysql)。 mysql版本 8.0.11 测试root 123456 (版本不同可以导入到出SQL文件) 、 django 4.0.6 建议每次更新数据后都同步下sql文件,目录存于mysql_back文件夹下面 ,用于异地恢复数据 启动服务器: 进入 HelloWorld 目录CMD输入以下命令, ``` py manage.py runserver 0.0.0.0:8000 ``` 注意和后面这个区分 python manage.py runserver 0.0.0.0:8000 (本地) 0.0.0.0 让其它电脑可连接到开发服务器,8000 为端口号。如果不说明,那么端口号默认为 8000。 如果远程访问项目提示问题DisallowedHost at / lnvalid Http_HOST header则需要修改setting.py文件ALLOWED_HOSTS = [] 改成ALLOWED_HOSTS = ['*']保存既可 # DEBUG = True #True为调试模式,部署时应改为 False 调试模式设置为False时,本地静态目录会报错 ------------------------------------ # 在 Windows 上安装 python python下载 https://www.python.org/downloads/ 如选择版本3.10.5下载 https://www.python.org/downloads/release/python-3105/ 安装选自定义 查看python版本方法一,CMD下 输入: python 查看python版本方法二,CMD下 输入: py --version CMD下 输入: pip list 可以查看Python中安装了哪些第三方库,如安装了Django那就会展示出来 https://docs.djangoproject.com/zh-hans/4.1/howto/windows/ ---------------------------------- # 虚拟环境 最佳实践是为你创建的每一个Django项目创建一个独立的环境。转至你想创建项目的文件夹,打开新的命令行窗口然后输入如下命令 ...\> py -m venv project-name 这将创建一个文件夹叫“项目名称” 设置虚拟环境。激活环境, 可到目录下运行: project-name\Scripts\activate.ba 虚拟环境就会激活,并且你会在命令提示符旁边看到 "(project-name)" 指向该环境。每次你打开新的命令行窗口,你需要再次激活环境。 ---------------------------------- # Django安装 https://docs.djangoproject.com/zh-hans/4.1/topics/install/#installing-official-release py -m pip install Django 这将下载并安装最新的 Django 发布版本。 安装完成后,你可以在命令提示符运行 django-admin --version 验证你安装的 Django。 建议在CMD下安装最简单(前提是先安装了python): 带版本号的安装: ``` pip install Django==4.0.6 ``` (有可能要先升级pip版本: python.exe -m pip install --upgrade pip ) ---------------------------------- # 查看版本 django版本4.0.6 检查是否安装成功 方法一:CMD下输入:python -m django --version 方法二:cmd下先输入python 再 >>> import django >>> django.get_version() # 创建项目 Django项目官方说明文档 https://docs.djangoproject.com/zh-hans/4.1/intro/tutorial01/ 使用 django-admin 来创建 HelloWorld 项目容器(外层文件名HelloWorld可随时修改): ``` django-admin startproject HelloWorld ``` 在manage.py同级目录下创建投票小应用 ``` python manage.py startapp polls ``` ------------------------------------------------------------- 在manage.py同级目录下创建投票小项目 python manage.py startapp polls # 配置MYSQL数据库 配置mysite.settings.py以下内容 ``` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'USER':'django', 'NAME':'djangoone', 'HOST':'127.0.0.1', 'PASSWORD':'123456', 'PORT':'3306', 'OPTIONS':{ 'init_command':"SET default_storage_engine=INNODB;", } # 'NAME': BASE_DIR / 'db.sqlite3', } } ``` ``` pip install mysqlclient #确定已安装python mysql链接依赖mysqlclient 若已安装跳过 ``` 备份数据库 先登录用户名django ``` mysql -udjango -p ``` 再备份 mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql ``` mysqldump -hdjangoone -P3306 -udjango -pdjango –database djangoone> djangoone20230524.sql ``` # 在polls.models.py内自定义模型类, ``` class Txl(models.Model): GENDER_CHOICES = ( (0, '男'), (1, '女') ) # name = models.ForeignKey(Choice, on_delete=models.CASCADE) name = models.CharField(max_length=200, default='无名氏',verbose_name='姓 名') content=models.TextField(default='通讯录标题',blank=True) #这里blank=True作用是设置该字段为【非必填项】 address = models.CharField(max_length=200,default='德阳市', verbose_name='地 址') gender = models.SmallIntegerField(choices=GENDER_CHOICES, default=0, verbose_name='性 别') tel = models.CharField(max_length=200, default=135,blank=True, verbose_name='电话号码') workgroup = models.CharField(max_length=200, default='技术播出中心群') txl_add_date = models.DateTimeField('date published') photo = models.ImageField(upload_to = 'uploudfiles/txlinfo', default = '/static/images/bj.png') #图片字段,错误提示需要安装python -m pip install Pillow #模型类如果未指明表名,Django默认以小写app应用名_小写模型类名为数据库表名。可通过db_table指明数据库表名。更换表名不影响数据 class Meta: db_table = 'txlinfo' verbose_name = '人物信息' def __str__(self): # return self.address return self.address[:50]+'...' #配置详情修改页面的标题显示字段,只显示5个字符,多余的用...表示 ``` 注意:python -m pip install Pillow //定义图片字段的时候需要依赖包pillow # 模型 迁移更新模型,更新数据库 python manage.py makemigrations 这个命令是记录我们对models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件001(此时数据库没有表) python manage.py migrate 而当我们执行前面这条命令主要作用就是把这些改动作用到数据库也就是执行migrations里面新改动的迁移文件更新数据库,比如创建数据表,或者增加字段属性。 另外一个需要注意的是这两个命令默认情况下是作用于全局,也就是对所有最新更改的models或者migrations下面的迁移文件进行对应的操作,如果要想仅仅对部分app进行作用的话 则执行如下命令: `python manage.py makemigrations appname,` `python manage.py migrate appname,` 如果要想精确到某一个迁移文件则可以使用: python manage.py migrate appname 文件名 # 创建后台用户名--------------------------- python manage.py createsuperuser 后台地址 http://127.0.0.1:8000/admin/ # 自定义后台---------------- Django默认的admin模板都可以被重写。 在manage.py文件同级下创建一个templates目录,在该目录下再创建一个admin目录。然后,打开设置文件mysite/settings.py,在TEMPLATES条目中添加一个DIRS选项: 'DIRS': [BASE_DIR / 'templates'], # 添加这一行 再创建一个admin目录,新疆一个模板base_site.html,内容如下 ``` {% extends "admin/base.html" %} {% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %} {% block branding %}

网站后台

{% endblock %} {% block nav-global %}{% endblock %} ``` # 美化后台------------------------------- pip install django-simpleui (安装说明:https://simpleui.72wo.com/docs/simpleui/doc.html#安装 ) 用pip或者源码方式安装simpleui后,在自己项目的settings.py文件中INSTALLED_APPS的第一行加入 'simpleui' # 静态文件------------------------------- 当运行 `python manage.py collectstatic` 的时候 STATIC_ROOT 文件夹 是用来将所有STATICFILES_DIRS中所有文件夹中的文件,以及各app中static中的文件都复制过来 把这些文件放到一起是为了用apache等部署的时候更方便 以下三条是setting.py里的配置 ``` SITE_ROOT = os.path.dirname(os.path.abspath(__file__)) SITE_ROOT = os.path.abspath(os.path.join(SITE_ROOT, '../')) STATIC_ROOT = os.path.join(SITE_ROOT, 'collectedstatic') #定义静态文件存储目录为collectedstatic ``` STATIC_URL = 'static/' #默认这条决定了文件调用路径 模板文件里使用如下代码引入路径 ``` {% load static %} #这段代码一定要放静态文件调用前 ``` # 视图-------------------------- 每个视图必须要做的只有两件事:返回一个包含被请求页面内容的 HttpResponse 对象,或者抛出一个异常,比如 Http404 。 # Python 20200206_Python_1 python免费开源教程_零基础入门到精通, Python是一种解释型、面向对象、动态数据类型的高级程序设计语言.django是WEB框架。 # ubantu上跑django成功案列 (https://www.dyrx.net:8000) ubantu + django4.0 + mysql + https + 后台进程运行 注意:需要SSL证书文件 .crt 和 .key。 以及安装依赖项 django-sslserver # 使用https (测试在ubantu里启动带SSL的链接成功) 1、安装django-sslserver ``` pip install django-sslserver ``` 2、在setting里加 ``` SECURE_SSL_REDIRECT = True # 所有的HTTP将重定向到HTTPS ``` 3、修改 ``` INSTALLED_APPS = [ 'simpleui', #要用自定义后台模板,则不能用这条导入模板 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', 'drf_yasg2', 'rest_framework_swagger', 'polls', #也可以是后面 'polls.apps.PollsConfig', 'api',#api.apps.ApiConfig', 'sslserver' ] ``` 4、将1_dyrx.net_bundle.crt和2_dyrx.net.key两个文件上传到项目目录django4里key文件夹下面。启动的时候路径是/www/wwwroot/django4/key/1_dyrx.net_bundle.crt。 启动 ``` python3 manage.py runsslserver --cert /www/wwwroot/django4/key/1_dyrx.net_bundle.crt --key /www/wwwroot/django4/key/2_dyrx.net.key 0.0.0.0:8000 ``` # 后台进程运行 ubuntu将Django项目挂起在后台命令 ``` nohup python3 manage.py runsslserver --cert /www/wwwroot/django4/key/1_dyrx.net_bundle.crt --key /www/wwwroot/django4/key/2_dyrx.net.key 0.0.0.0:8000 >/www/wwwroot/django4/django_8000.log 2>&1 & ``` 日志文件存放于django_8000.log里,如果看到以下文档说明成功 ``` nohup: ignoring input Validating models... System check identified no issues (0 silenced). November 06, 2022 - 16:43:48 Django version 4.0.6, using settings 'mysite.settings' Starting development server at https://0.0.0.0:8000/ Using SSL certificate: /www/wwwroot/django4/key/1_dyrx.net_bundle.crt Using SSL key: /www/wwwroot/django4/key/2_dyrx.net.key Quit the server with CONTROL-C. [06/Nov/2022 16:44:03] "GET /admin/polls/txl/ HTTP/1.1" 200 37912 [06/Nov/2022 16:44:03] "GET /admin/jsi18n/ HTTP/1.1" 200 8398 [06/Nov/2022 16:44:04] "GET /admin/polls/question/ HTTP/1.1" 200 24439 ... ``` 如此,日志文件将会越来越大! ``` tail -f django_8000.log #查看实时日志可以用 ```` # ubantu快速启动和结束进程文件 start.sh和stop.sh 接着可以在manage.py目录下一个start.sh文件启动django,再写个stop.sh停掉django服务 文件start.sh里输入: ``` nohup python3 manage.py runsslserver --cert /www/wwwroot/django4/key/1_dyrx.net_bundle.crt --key /www/wwwroot/django4/key/2_dyrx.net.key 0.0.0.0:8000 >/www/wwwroot/django4/django_8000.log 2>&1 & ``` 文件stop.sh里输入: ``` ps -aux | grep python|xargs kill -9 ``` 快速启动: cd到相应目录,执行以下代码 ``` ./start.sh ``` 快速结束: cd到相应目录,执行以下代码 ``` ./stop.sh ``` # 快速查找Python site-packages目录的位置 ``` python -m site ``` # 富文本编辑器的安装 https://www.cnblogs.com/gcgc/p/9206449.html pip install django-tinymce # 后台批量导入导出import-export https://blog.csdn.net/weixin_42134789/article/details/120072885 (部分内容从下面取) https://zhuanlan.zhihu.com/p/456360553?utm_id=0 ``` pip install django-import-export ``` # 后台美化,Django实战: 手把手教你配置Django SimpleUI打造美丽后台(多图) https://mp.weixin.qq.com/s?__biz=MjM5OTMyODA4Nw%3D%3D&chksm=a73c69f8904be0eec3db8b8e2139a7c4c7ee851b04f0f8f1e0c8fa04f144249859df129abe60&idx=1&mid=2247485888&scene=21&sn=198a37f4a949685b9fb795ac5fa0c88b#wechat_redirect #后台列表夜封面图不显示图片问题 https://www.freesion.com/article/9649917697/ 涉及models.py、admin.py ``` # models.py # 封面图 后台列表显示配置start def image_data(self): if self.news_photo: return format_html( '', self.news_photo, ) else: return format_html( '', ) # 填写表单里面并没有配置图片,可以根据自己的需求修改配置 def image_admin(self): return format_html( '', self.news_photo, ) image_data.short_description = '设备照片' image_admin.short_description = '设备照片' # 封面图 后台列表显示配置end ``` ``` # admin.py 用image_data替换了news_photo @admin.register(KeepRecord) class NewsAdmin(admin.ModelAdmin): list_display = ('id','image_data','news_title','news_lanmu','news_state','click_nums','news_comefrom','news_add_date') # list显示列表,第一个字段在管理后台可以链接至详情页 ``` # 命令生成json文件和yaml文件 (待测试) python manage.py generate_swagger swagger.yaml/swagger.json