Home >  > 网站开发(六)财务网开发之三(计数器)

网站开发(六)财务网开发之三(计数器)

0

一、app的组织

1.添加新的App
新建一个vedio的app,再在项目根目录下面建立了一个apps的文件夹,在pycharm中将vedio文件夹拖到apps下面,这样系统会自动在apps下面生成一个init文件。

2.Mark

这样就可以在pycharm中使用 from vedio import 导入了。但是执行代码的时候还是会报错。会出现找不到vedio的提示。

3.settings.py

1import sys
2 
3BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
4sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

二、模板文件
1.建立文件夹
在项目根目录建立一个templates文件夹,再新建一个vedio文件夹,将模板文件放到这个文件夹。

2.settings.py

1'DIRS': [os.path.join(BASE_DIR, 'templates/')],

Referal:
http://www.xiucai.com/cooperation/

第三个app (PPT下载)

三、富文本编辑器django-ckeditor
1.安装
本来看DjangoUeditor的功能更多,可是看已经几年没有更新了,而且杨仕航的博客说他用起来一般,所以还是用django-ckeditor吧。安装并加入到settings.py中.

1pip install django-ckeditor
2 
3    INSTALLED_APPS = [
4        # ...
5        'ckeditor',
6    ]

2.修改model

1from ckeditor.fields import RichTextField
2content = RichTextField()

3.Migrage

1python manage.py makemigrations ppt
2 
3python manage.py migrate

4.在ppt下面的admin添加代码

1from django.contrib import admin
2from .models import Ppt
3 
4# Register your models here.
5admin.site.register(Ppt)

5.在后台就可以看到效果了。

四、添加图片上传功能
1.安装pillow,并注册上传文件路径

1pip install pillow
2 
3    INSTALLED_APPS = [
4        # ...
5        'ckeditor',
6        'ckeditor_uploader',
7    ]

2.设置上传位置
修改settings.py

1MEDIA_URL = '/media/'
2# 放在django项目根目录,同时也需要创建media文件夹
3MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
4  
5CKEDITOR_UPLOAD_PATH = 'upload/'

3.配置上传url和media的访问
修改项目全局的urls.py

1from django.conf import settings
2from django.conf.urls.static import static
3  
4  
5urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

4.修改Model
通过上面的设置,富文本编辑器可以添加图片,但只能添加引用图片,无法添加上传的图片。作如下修改:

1from django.db import models
2from ckeditor_uploader.fields import RichTextUploadingField
3  
4  
5class Blog(models.Model):
6    title = models.CharField(max_length=50)
7    content = RichTextUploadingField()

5.解决错误
测试时出现:Image source URL is missing.的错误。
原来要点一下那个“send it to the server”才行。

这样就终于成功了。

6.如何在前端显示
在模板文件里的content文本前后增加两个标签即可实现,如:

1<p>{% autoescape off %}{{ question.content }}{% endautoescape %}</p>

7.添加视频:
https://www.bilibili.com/video/av19154686/

四、添加计数器
1.添加字段

1class Ppt(models.Model):
2    views = models.IntegerField(default=0)
3 
4#添加计数器方法
5    def viewed(self):
6        self.views += 1
7        self.save(update_fields=['views'])

然后执行make migration

2.Views

1class PptDetailView(DetailView):
2    """问题详情页"""
3 
4    model = Ppt
5    context_object_name = 'question'
6    template_name = 'ppt/ppt_detail.html'
7 
8    def get_object(self, queryset=None):
9        obj = super().get_object(queryset=queryset)
10        obj.viewed()
11        return obj

前端调用就不用说了,直接使用{{ question.views }}就可以了。

备注:

到这里这个APP就完成了,这个可以以后作为文章类的APP,有分类,有标签,有富文本编辑器。

五、解决migrate错误问题
由于添加了浏览量的字段,在执行migrate的时候,我选择了“2”,手动输入数据,结果报错了。记得以后不要选2了,要选1,直接在model的代码中设定default或者null=true.
最终的解决方案是:
1.将ppt下面migration下面的除__init__.py之外的所有0001,0002这样的文件删除。
2。在数据库中django_migrations表中将出问题的app相关的迁移记录都删掉
3.再执行migrate.

六、解决用户上传头像的功能
之前用户无法上传头像,通过打印from发现,用户头像还是没有发送:

七、数据采集
利用id,构建url,利用xpath获得回复。

1/html/body/div[2]/div[1]/div/div[1]/div[2]/table/tbody/tr[6]/td/textarea

八、获取插入文章后的id
比如发表问题之后,需要马上得到这个问题的id,方便插入答案。
其实非常简单。

1insertRes = Testlist.objects.create(*******)
2insertRes.id

可参考:
https://testerhome.com/topics/17507

九、注册

1from selenium import webdriver
2from selenium.webdriver.support.select import Select
3import time
4 
5#用webdriver启动谷歌浏览器
6print("启动浏览器,打开dede登录界面")
7driver = webdriver.Chrome(executable_path='C:\\Users\\Kevin\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe')
9author = "mymali"
10passowrd = "kevin1314"
11#自动填入登录用户名
12driver.find_element_by_xpath("//input[@name='username']").send_keys(author)
13#自动填入登录密码
14driver.find_element_by_xpath("./*//input[@name='password1']").send_keys(passowrd)
15driver.find_element_by_xpath("./*//input[@name='password2']").send_keys(passowrd)
16#自动点击登录按钮进行登录
17driver.find_element_by_xpath("./*//button[@type='submit']").click()
18print("注册成功")
19time.sleep(2)

十、后续问题
网站部署到服务器上之后,发现访问首页与列表页非常慢。
1.分页
使用下面的新的代码:

1{% if is_paginated %}
2 <nav aria-label="Score pagination" class="mb-4">
3      <ul class="pagination">
4          {% if page_obj.has_previous %}
5          <li class="page-item">
6              <a class="page-link" href="?page={{ page_obj.previous_page_number }}">上一页</a>
7          </li>
8          {% else %}
9          <li class="page-item disabled">
10              <span class="page-link">上一页</span>
11          </li>
12          {% endif %}
13             <!--首页-->
14             {% if page_obj.number == 1 %}
15                 <li class="page-item active">
16                     <span class="page-link">
17                         {{ page_obj.number }}
18                         <span class="sr-only">(current)</span>
19                     </span>
20                 </li>
21             {% else %}
22                   <li class="page-item">
23                       <a class="page-link" href="?page=1">1</a>
24                   </li>
25             {% endif %}
26 
27           {% for page_num in paginator.page_range %}
28               {% if page_num != 1 and page_num != paginator.num_pages %}
29 
30                 {% if page_obj.number == page_num %}
31                     <li class="page-item active">
32                         <span class="page-link">
33                             {{ page_num }}
34                             <span class="sr-only">(current)</span>
35                         </span>
36                     </li>
37                     <!--向前三页-->
38                 {% elif page_obj.number|add:-3 == page_num %}
39                     <li class="page-item">
40                         <a class="page-link" href="?page={{ page_num }}">{{ page_num }}</a>
41                     </li>
42                 {% elif page_obj.number|add:-2 == page_num %}
43                     <li class="page-item">
44                         <a class="page-link" href="?page={{ page_num }}">{{ page_num }}</a>
45                     </li>
46                 {% elif page_obj.number|add:-1 == page_num %}
47                     <li class="page-item">
48                         <a class="page-link" href="?page={{ page_num }}">{{ page_num }}</a>
49                     </li>
50                     <!--向后三页-->
51                 {% elif page_obj.number|add:3 == page_num %}
52                     <li class="page-item">
53                         <a class="page-link" href="?page={{ page_num }}">{{ page_num }}</a>
54                     </li>
55                 {% elif page_obj.number|add:2 == page_num %}
56                     <li class="page-item">
57                         <a class="page-link" href="?page={{ page_num }}">{{ page_num }}</a>
58                     </li>
59                 {% elif page_obj.number|add:1 == page_num %}
60                     <li class="page-item">
61                         <a class="page-link" href="?page={{ page_num }}">{{ page_num }}</a>
62                     </li>
63                 {% endif %}
64               {% endif %}
65             {% endfor %}
66             <!--最后一页-->
67             {% if page_obj.number == paginator.num_pages %}
68                 <li class="page-item active">
69                     <span class="page-link">
70                         {{ paginator.num_pages }}
71                         <span class="sr-only">(current)</span>
72                     </span>
73                 </li>
74             {% else %}
75                   <li class="page-item">
76                       <a class="page-link" href="?page={{ paginator.num_pages }}">{{ paginator.num_pages }}</a>
77                   </li>
78             {% endif %}
79 
80             {% if page_obj.has_next %}
81                 <li class="page-item">
82                     <a class="page-link" href="?page={{ page_obj.next_page_number }}">下一页</a>
83                 </li>
84             {% else %}
85                 <li class="page-item disabled">
86                     <span class="page-link">下一页</span>
87                 </li>
88             {% endif %}
89      </ul>
90 </nav>
91 {% endif %}

2.终于找到了原因
是下面这一行代码在作怪:

1context["popular_tags"] = Question.objects.get_counted_tags()  # 页面的标签功能

将这一行代码注释掉之后,网站速度飞快。

暧昧帖

本文暂无标签

发表评论

*

*