《仿知乎在线问答网站.pdf》由会员分享,可在线阅读,更多相关《仿知乎在线问答网站.pdf(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、程序设计综合实验 程序设计综合实验 仿知乎在线问答平台 程序设计综合实验 仿知乎在线问答平台 项目要求项目要求 设计实现一个仿知乎在线问答网站,实现问答,私信,点赞,评论等功能。要 求回答问题可以插入图片, 用户注册支持信息查重和合法检测。 程序设计综合实验 目录 Django框架 背景知识 GET/POST请求 项目构建 概要设计 添加模板 详细设计 MVC架构 数据库配置 数据存储 用户信息校验 模糊查询 程序设计综合实验 背景知识 a 程序设计综合实验 Django框架 仿知乎在线问答平台 开源Web应用框架 2008年9月发布了第一个正式版本1.0 采用MVC设计模式 目的是简便、快速
2、的开发数据库驱动的网站 有许多功能强大的第三方插件 程序设计综合实验 GET请求和POST请求 仿知乎在线问答平台 两种最常用的 HTTP 方法:GET 和 POST GET - 从指定的资源请求数据。 POST - 向指定的资源提交要被处理的数据 GET请求的数据会暴露在地址栏中,而POST请求不会 GET请求时,传输数据会受到URL长度的限制 POST,由于不是URL传值,理论上是不会受限制 程序设计综合实验 MVC架构 仿知乎在线问答平台 Model-View-Controller 视图:为用户显示模型信息 模型:应用程序的核心,封装内核数据与状态。 控制器:提供给用户进行操作的接口。控
3、制器接受 用户输入,输入事件转换成服务请求,传送到模型 或视图。 将Model和View的实现代码分离,从而使同一个 程序可以使用不同的表现形式。 Controller存在的目的则是确保M和V的同步,一 旦M改变,V应该同步更新。 程序设计综合实验 概要设计 b 程序设计综合实验 项目构建 仿知乎在线问答平台 通过命令创建一个基本的测试项目 C:UserssynDesktop案例django-admin startproject HelloWorld 获得右图所示的项目目录结构 manage.py: 与Django 项目进行交互 HelloWorld/_init_.py: 空文件,告诉 Pyt
4、hon 该目录是一个 Python 包 HelloWorld/settings.py: 项目的设置/配置 HelloWorld/urls.py: 项目的 URL 声明; 即一份由 Django 驱动的网站目录 。 HelloWorld/wsgi.py: 一个 WSGI 兼容的 Web 服务器的入口 程序设计综合实验 项目构建 仿知乎在线问答平台 进入 HelloWorld 目录输入以下命令,启动服务器 python manage.py runserver 0.0.0.0:8000 程序设计综合实验 添加模板 仿知乎在线问答平台 templates/hello.html 文件中添加 hello
5、修改views.py def hello(request): context = contexthello = Hello World! return render(request, hello.html, context) 在url.py中添加如下代码 urlpatterns = url(r$, view.hello), 程序设计综合实验 数据存储-ORM 仿知乎在线问答网站 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决 面向对象与关系数据库存在的互不匹配的现象的技术。 将关系型数据库转化为对象来进行处理。数据表就是一个类,表的一行就是一
6、个对象,一行的每个字段就是属性。 缺点:会牺牲程序的执行效率。 优点:解决重复去读数据库,获取内容的操作。 程序设计综合实验 数据存储-模型构建 仿知乎在线问答网站 程序设计综合实验 数据存储-模型构建 仿知乎在线问答网站 程序设计综合实验 数据存储-模型构建 仿知乎在线问答网站 程序设计综合实验 详细设计 c 程序设计综合实验 MySQL和sqlite3 仿知乎在线问答网站 django自带一个默认的数据库sqlite3,可以直接使用 sqlite是单机数据库。功能简约,小型化,追求最大磁盘效率 MySQL是完善的服务器数据库。功能全面,综合化,追求最大并发效率 程序设计综合实验 mysql
7、数据库配置 仿知乎在线问答网站 settings.py 文件中找到 DATABASES 配置项,将其信息修改为: DATABASES = default: ENGINE: django.db.backends.mysql, NAME: test, USER: test, PASSWORD: test, HOST:localhost, PORT:3306, 上面包含数据库名称和用户的信息,它们与 MySQL 中对应数据库和用户的设置 相同。Django 根据这一设置,与 MySQL 中相应的数据库和用户连接起来。 程序设计综合实验 用户信息校验 仿知乎在线问答平台 前台数据通过ajax传到后台后
8、,通过正则表达式和数据库查询等手段测试是否 有重复姓名,重复电话号码以及格式问题。返回值为一个字典,当数据异常时 值为出错信息的描述字符串,否则为空字符串,样例如下: def verify_username(name): name_dic = string = query = User.objects.filter(username=name).values(username) if len(name) 3: string = string + 用户名长度不能低于3位 elif query: string = string + 用户名已存在 name_dicname = string retu
9、rn name_dic 程序设计综合实验 模糊查询 仿知乎在线问答平台 前台取出字符串发送get请求 $(window).attr(location,/?searchText=+string); 后台查询数据库filter后输出结果 searchText=request.GET.get(searhText, default=) if searchText: Qlist=Question.objects.filter(Q(title_contains=searchText) | Q(tag_name_contains=searchText).distinct().order_by(-likes)
10、 else: Qlist = Question.objects.all().order_by(-likes) 程序设计综合实验 模糊查询 仿知乎在线问答平台 程序设计综合实验 案例改进 d 程序设计综合实验 suit子框架配置-使用前效果 仿知乎在线问答平台 程序设计综合实验 suit子框架配置-使用后效果 仿知乎在线问答平台 程序设计综合实验 suit子框架配置 仿知乎在线问答平台 pip install django-suit SUIT_CONFIG = # suit页面配置 ADMIN_NAME: 知否, # 登录界面提示 LIST_PER_PAGE: 10, MENU: (label:
11、 u用户管理, app: Home, models: (User, Follow, Question, Article, Tag, Comment, Message), # 每一个字典表示左侧菜单的一栏 ), # label表示name,app表示上边的install的app,models表示用了哪些models suit子框架安装 setting.py修改 程序设计综合实验 案例总结 e 程序设计综合实验 运行效果 仿知乎在线问答网站 程序设计综合实验 开发周期短 基于Django的 在线问答平台 拥有自助管理后台 MVC架构的实用性 缺点 优点 界面简洁,需要美化 仿知乎在线问答平台 用户不能修改回答的问题 程序设计综合实验 THANKS!