基于新版PyCharm、Anaconda3、django3框架开发内容发布系统

1:环境安装搭建

python有多个版本,可通过Anaconda3来管理python版本从而在多个版本之间进行切换。

原先我们团队使用的环境是 Anaconda3-2019.07、pycharm-professional-2018.3.5、python3.7,并做了一些爬虫项目,后来由于人工智能机器学习的需要,于是升级版本,使用新的2023版本的,Anaconda3-2023.07-1,pycharm-professional,python11。可以在官网查找下载或者给我们留言会发安装包链接,下载下来后,依次安装完。升级过程中可能会遇到不少细节问题。

1.1、安装pycharm-professional-2023.1

本来是想保留以前版本的,但是后来装好发现好像存在不兼容情况,以前代码出现各种依赖包错误的情况,各个情况不可能有所不同,我们团队就统一把以前版本卸载了,用新版本了。

1.2、安装Anaconda3-2023.07-1,同样把以前的老版本卸载掉了,安装上了新版本。

有时不用pycharm,直接用Jupyter Notebook也可以,Jupyter Notebook有个好处是既可以写代码,也可以形成笔记,比较方便。
启动如下图所示:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第1张图片

打开如下图所示:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第2张图片

1.3、python版本选择

安装好Anaconda3,点击Anaconda Navigator

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第3张图片

需要过一段时间才能启动成功,启动后的界面如图所示:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第4张图片

基于Anaconda3创建多python版本:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第5张图片

创建后入下所示:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第6张图片

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第7张图片 点击启动图标,显示Open Terminal和Open with Python。

点击“Open Terminal”:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第8张图片

点击open with Python:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第9张图片 可点击需要用的python版本进行切换,base(root)是内置的基本版本。

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第10张图片

可选择依赖包的版本: 

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第11张图片

2:django安装

切换下载源问题:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第12张图片

有时提示下载源下载不到,以上显示从tsinghua.edu.cn镜像下载未找到对应的下载包,可以进入Anaconda官网查询相应的包后下载

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第13张图片

点开其中一个如下;

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第14张图片

可以看到通过conda命令安装,在终端Terminal或在Anaconda Prompt中中输入上面红框中的命令即可,

3:代码编写

3.1、新建Django项目,结构如下

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第15张图片

3.2、配置数据库mysql连接
django默认使用轻量级数据库sqlite3,不需要安装,所以很方便,一个.sqlite文件即可,这里我们对应实际情况,改变一下,使用了mysql的数据库来完成,所以需要配置一下数据库连接。
首先我们找到settings文件下,修改database的参数:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第16张图片

接下来我们安装Pycharm上的pymysql,这个比较简单,pip安装即可
在settings.py同目录下的__init__.py中写入下列代码:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第17张图片 这个成功的话,你可以再run界面看到打印的结果,也可以再Python Console中看到

3.3、创建数据库表

完成数据库连接后,开始创建数据库表
首先,在models.py中写入:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第18张图片

内容自定,然后 在terminal上面执行下面两条命令:

python  manage.py makemigrations  #检测app/models.py文件的改动

python manage.py  migrate          #把上面的改动翻译成sql语句,然后去数据库中执行
这两步完成后可以去数据库查看你的表了

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第19张图片

在terminal端口,使用python manage.py shell可以进入shell端,其实和python Console一样的,使用下列命令

>>> from datetime import datetime
>>> from web.models import Web
>>> Web.objects.all()

>>> web1 = Web(title='test', body='just see', timestamp=datetime.now())
>>> web1

>>> web1.save()       #这里我遇到一个问题,错误原因:和UTC(世界标准时间)有关。
					   解决方法:.../settings.py 文件中设置:USE_TZ = False

错误大概如下:
RuntimeWarning: DateTimeField Web.timestamp received a naive datetime

>>> web1.save()        #这样才能保存到数据库中
>>> web1.title		   #一些基本查询操作
'test'
>>> web1.body
'just see'
>>> web1.timestamp     #查询,如查询时间

3.4、admin管理
 admin是创建用于web的创建、读取、更新、删除(CRUD)的工具,是一个自动化的后台管理应用,在amin.py中,我们注册一下

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第20张图片

注册后,我们可以使用http://127.0.0.1:5000/admin进入管理界面,如下

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第21张图片 这里,我们需要创建一个超级用户用于登录

venv) D:\work\mys\Python\pythonTestProject\blog>python manage.py createsuperuser
Username (leave blank to use 'administrator'): li
Email address: [email protected]
Password:
Password (again):
Superuser created successfully.

挨着输入用户名和密码就行了,登录后界面: 

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第22张图片

点击上面Webs后展示如下:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第23张图片注意:admin.py中定义了WebAdmin类来指定输出,这样可以看到和清楚的输出,开头为标题,后面为时间戳 。

点击title或者timestamp可以排序,这些功能都是很有用。

部分参考:pycharm+python+django+mysql开发的web应用_技术最差的的博客-CSDN博客

3.5、创建用户界面

用户是不会用到后台的,所以我们需要为用户定制内容界面,首先我们可以先写个模板,用于显示用户的内容,用户界面展示和提交的表单archive.html如下:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第24张图片

这个是django标准html输出,用花括号{{...}}表示输出内容,里面是变量,我们这里用到了一个特殊的知识,django的过滤器,就是第一行的post.title|title,这输入本来是post.title,加上一个管道符号(‘|’),后面是title过滤函数,这样就可以是标题的首字母大写,这是个很实用的功能

接下来我们在urls.py中加入我们的新的地址:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第25张图片

所以我们需要创建新的urls文件,地址为.../web/urls.py,写入

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第26张图片

3.6、创建模型models.py,代码如下:

from __future__ import unicode_literals
from django.db import models
from django import forms
# Create your models here.
class Web(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=150)
    body = models.TextField()
    timestamp = models.DateTimeField()

    class Meta:
        ordering = ('-timestamp',)

class WebForm(forms.ModelForm):
    # title = forms.CharField(max_length=150)
    # body = forms.CharField(widget=forms.Textarea(attrs={'row': 13, 'cols': 60}))
    # timestamp = forms.DateTimeField()
    class Meta:
        model = Web
        exclude = ('timestamp',)

3.7、创建模型views.py,代码如下:

#from django.shortcuts import render

# Create your views here.

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from datetime import datetime
#from django.shortcuts import render_to_response
from django.shortcuts import render
from web.models import Web, WebForm
from django.http import HttpResponseRedirect
from django.http import HttpResponse
import json

def archive(request):
    #post = Web(title='mocktitle', body='mockbody', timestamp=datetime.now())
    #posts = Web.objects.all()  # 改了这个而已
    webobjects = Web.objects.all().order_by('-timestamp')[:10]

    #return render(request, 'archive.html', {'posts': post})    #前面的html中要接受一个post参数的
    return render(request, 'archive.html', {'webobjects': webobjects})

def create_context(request):
    if request.method == 'POST':
#        Web(
#            title=request.POST.get('title'),
#            body=request.POST.get('body'),
#            timestamp=datetime.now(),
#        ).save()
        title=request.POST.get('title')
        form = WebForm(request.POST)
        #form.timestamp = datetime.now()
        if form.is_valid():
            post = form.save(commit=False)	#因为没有时间戳,所以先不提交,只是保存
            post.timestamp = datetime.now()	#添加了后再提交
            post.save()
        else:
            # 取出验证失败的信息,方便定位问题,给用用户提示
            ErrorDict = form.errors

            Error_Str = json.dumps(ErrorDict)

            Error_Dict = json.loads(Error_Str)

            # for value in  Error_Dict.values():
            #     logger.debug(value)
            # return HttpResponse(ErrorDict.__repr__())
            return HttpResponse(Error_Dict.values())
    return HttpResponseRedirect('/test/')

3.8、调试启动服务命令,设置如下:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第27张图片

设置manage的运行端口,按照上面两张图点进去设置即可,一般是因为是空白的,写上runserver 127.0.0.1:5000即可,端口不限,在控制台输入:

python manage.py runserver

到这里第一步就完成了,我们的blog算是运行起来了,输入:http://127.0.0.1:5000/test/,可以正常访问了。

3.9、写测试代码

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第28张图片

编写测试用例并启动,在Target中输。入:web.tests.WebTest.test_obj_create,启动测试用例

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第29张图片

经过以上操作,打开页面,可以填写标题Title和Body并提交,最新提交的数据会展示出来。如下所示: 

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第30张图片

调试遇到问题1:

【Django】django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.0 or newer is required;

原因是 MySQLclient 目前只支持到 Python3.4,你使用了更高版本的 python
处理方式一:在setting.py同文件夹下的_init_.py加入以下内容
import pymysql
pymysql.version_info = (1, 4, 13, "final", 0)   # 指定版本
pymysql.install_as_MySQLdb()  

注意:

需要代码包或者需要电子书的python从入门到实践(python从入门到实践找了好久才下载到。),可以联系。

centos7中python3.11.3和Django安装方式:

一.安装环境:
Linux系统:centos7,可以正常访问互联网。

python版本:3.11.3,安装python3的最新版本。

环境最基本的就这些了。

1.安装python3:
不多说,直接上安装过程~

cd /root
#只是将python3.11.3的安装包下载到 /root目录下
wget https://www.python.org/ftp/python/3.11.3/Python-3.11.3.tgz(需要很长时间下载,不想等待需要安装包可联系)
#下载最新的软件安装包
tar -xzf Python-3.11.3.tgz
#解压缩安装包
yum -y install gcc zlib zlib-devel libffi libffi-devel
#安装源码编译需要的编译环境
yum install readline-devel
#可以解决后期出现的方向键、删除键乱码问题,这里提前避免。
yum install openssl-devel openssl11 openssl11-devel
#安装openssl11,后期的pip3安装网络相关模块需要用到ssl模块。
export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)
#设置编译FLAG,以便使用最新的openssl库
cd /root/Python-3.11.3
#进入刚解压缩的目录
./configure --prefix=/usr/python --with-ssl
#指定python3的安装目录为 /usr/python 并使用ssl模块,指定目录好处是
#后期删除此文件夹就可以完全删除软件了。
make
make install
#就是源码编译并安装了,时间会持续几分钟。
ln -s /usr/python/bin/python3 /usr/bin/python3
ln -s /usr/python/bin/pip3 /usr/bin/pip3
#指定链接,此后我们系统的任何地方输入python3就是我们安装的
#这个最新版python3了

安装到这里我们就可以正确使用python3了,实例如下:

输入命令python3后,查看 python3 的版本,可以查看python3安装好了。

查看 pip3 的版本,可以输入命令:

pip3 -V

2.安装django:

通过 pip3 安装 Django

安装好 pip 后,安装 Django web 框架

命令:sudo pip3 install django

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第31张图片 以上提示pip版本升级,输入升级命令:/usr/python/bin/python3.11 -m pip install --upgrade pip

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第32张图片

 输入升级命令后,再次安装djiango,命令如下:

sudo pip3 install django

遇到警告如下所示:

 解决方法如下,依次运行下面的两个代码,第一个是先验条件,第二个代码块是自己要实现的目标。

# The --root-user-action option is available as of pip v22.1.
pip install --upgrade pip


# 原始目标:pip install package
# 用自己要pip的包替换【package】
pip install --root-user-action=ignore 【package】

以上未成功解决,把pip3命令输入无用,查看可能是pip3的软连接丢失了,于是输入命令,再次建立pip3软连接,命令:ln -s /usr/python/bin/pip3 /usr/bin/pip3,如下图所示:

换另外一种方式,指定django版本安装,成功安装,如下图所示:

输入命令pip3 install django==3.2.10

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第33张图片

 至此,cents7下的python3.11.3和django version 3.2.10安装完成了。

安装完成后,查看 django 的版本

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第34张图片

 把 django-admin 执行文件 从 /usr/python/bin 拷贝到 /usr/bin,命令如下:

sudo cp /usr/python/bin/django-admin /usr/bin/

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第35张图片

 3.发布应用,把项目文件放入/opt/blog目录中,如下图所示:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第36张图片

 启动 Django 应用程序

所有设置和配置就绪后,启动 Django 应用程序

cd /opt/blog

sudo python3 manage.py runserver 0.0.0.0:8000

 由于项目中用的数据库mysql链接,未安装 python mysql模块,报错如下:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第37张图片

查看确实没有安装mysql模块,接着安装mysql模块,如下所示:

 再次执行启动命令(sudo python3 manage.py runserver 0.0.0.0:8788),启动成功如下:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第38张图片

访问页面后出现:DisallowedHost at /test

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第39张图片

原因分析:
ALLOWED HOSTS
Default: [](Empty list)
表示此 Django站点 可以投放的主机/域名的字符串列表。这是防止HTTP主机头部攻击的安全措施,即使在许多看似安全的Web服务器配置下也是如此。
问题处理:
修改创建项目时生成的setting.py文件
         将ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ['*']
  注意:不是把域名添加进去。
  settings.py在应用名那个文件夹。

如下图所示:

基于新版PyCharm、Anaconda3、django3框架开发内容发布系统_第40张图片

再次访问,能够正常访问,发布成功! 

你可能感兴趣的:(pycharm,django,ide)