SAOMS系统搭建(一)

CodeMaster7
• 阅读 1188

SAOMS系统搭建

采用python3.6 + django2.1 + pycharm

  • Django采用M(model: 数据存取层) T(template: 业务逻辑层) V(views: 表现层)

初始化项目

1. 首先要确保有pip包管理工具
2. virtualenv: pip install virtualenv, python虚拟环境
3. mkvirtualenv <project_name>创建虚拟环境
4. workon <env_name> 进入虚拟环境
5. pip install xxx 安装依赖包,配置项目环境
6. django-admin startproject <pro_name> 创建项目
7. 进入项目目录, python manage.py help 查看manage.py的功能
8. python manage.py runserver 80 启动项目,默认端口8000
9. 访问 127.0.0.1:80,项目创建成功

创建应用

python manage.py startapp <app_name>
目录结构:
-SAOMS

--app

---migrations
----__init__.py

---__init__.py
---admin.py
---models.py
---views.py
---apps.py
---tests.py

--manage.py

--SAOMS
---settings.py
---wsgi.py
---urls.py

项目settings.py配置

1. INSTALL_APPS添加刚才创建的app
2. STATIC_URL = 'static' 静态资源的起始URL,其static文件只能在app里
3. STATICFILES_DIR = [os.path.join(BASE_DIR, 'public_static'), ] 可选配置属性,
4. STATIC_ROOT = os.path.join(BASE_DIR, 'all_static') 用于生产部署的时候,开发时用不太到

5. 模板路径,tamplates,根目录下放公共的模板,app目录下放各自app独立的模板
'DIRS': [os.path.join(BASE_DIR, 'templates'),
                 os.path.join(BASE_DIR, 'home/templates'),
                 os.path.join(BASE_DIR, 'student/templates'), ],
                 
6. 数据库配置
django.db.backends.postgresql/mysql/sqlite3/oracle
default为默认数据库,也可以链接多个数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'name',
        'USER': 'root',
        'PASSWORD': '****',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
    
    'myDJANGO': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': <name>,
        'USER': 'root',
        'PASSWORD': '*****',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }

7. 中间件,处理request和response对象的钩子,中间件的作用主要使处理用户请求信息,也可以自定义中间件,添加到配置属性即可。

编写URL(统一资源定位符)规则

  1. 在每个app文件夹中设置独立的静态资源和模板文件夹并添加一个urls.py文件
  2. 根目录下urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('home.urls')),
]
  1. app中的urls.py
from django.urls import path
from . import views


urlpatterns = [
    path('', views.index),
]

# app 的views中的代码
from django.http import HttpResponse

def index(request):
    return HttpResponse('Hello World')
  1. 带变量的URL
例如带有日期的url
  • url的变量类型又字符类型,整型,slug, uuid,最常用的使字符类型和整型。
path('<year>/<int:month>/<slug:day>', views.mydate)
  • 也可以使用正则表达式来规范化数据格式
from django.urls import path, re_path

re_path('(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2}).html', views.mydate)

URL末端使用正则表达式,应在末端加上斜杠或其他字符,否则无法生效。
  • 设置参数name,
views.mydate, name='mydate'),

<div>
    <a href="/2019/09/10.html">2019 pld achieve</a>
</div>
    <a href="{% url 'mydate' 2019 %}">2019 achieve</a>
</div>
  • 设置额外参数
1. 除了name之外,还有参数类型是以字典的数据类型传递的只能在视图函数中读取和使用

视图探究

  1. render, render_to_response, redirect
def index(request):
    return render(request, 'template2/index.html', context={'title': '首页'}, status=500)
  1. render(request, template_name, context = None, content_type = None, status = None, using = None)
  2. 数据可视化
  • 与model实现数据交互,读取并处理后台数据,最后生成HTML页面返回给用户。
# coding=utf-8

from django.db import models

# Create your models here.

class Product(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=50)
    type = models.CharField(max_length=20)

# views.py

from models import Product
def index(request):
    type_list = Product.objects.values('type').distinct()
    name_list = Product.objects.values('name', 'type')
    context = {'title': '首页', 'type_list': type_list, 'name_list': name_list}
    return render(request, 'template2/index.html', context=context, status=200)
  1. 通用视图
TemplateView: 直接返回HTML模板,无法将数据库的数据展示出来
ListView: 将数据库数据传递给HTML模板,通常获取某个表的所有数据
DetailView: 通常获取数据表的单条数据

深入模板

Django模板,Jinja2模板语言(http://docs.jinkan.org/docs/j...
  1. 变量和标签
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{{ title }}</title>
    {% load staticfiles %}
    <link rel="icon" href="{% static "img/hw.ico" %}">
    <script src="{% static "js/hw_index.js" %}"></script>
</head>
<body>
    <ul>
        {% for type in type_list %}
        <li>
            <h3><a href="#">{{ type.type }}</a></h3>
            <p>
                {% for name in name_list %}
                {% if name.type == type.type %}
                <span>{{ name.name }}</span>
                {% endif %}
            {% endfor %}
            </p>
        </li>
        {% endfor %}
    </ul>
</body>
  1. 常用标签
{% for %}:遍历
{% if %}:条件判断
{% csrf_token %}:生成csrf_token标签,防护跨站请求伪造攻击
{% url 'index' <kwargs> %}:引用路由配置地址
{% with %}:将变量名重新命名
{% load %}:加载导入Django的标签库
{% static %}:读取静态资源的文件内容
{% extends xxx %}:模板继承,xxx为模板文件名
{% block xxx %}:重写父类模板的代码

3.模板继承

{% extends "base.html" %}
{% block body %}
<a href="{% url 'index' target="_blank %}"></a>
{% endblock %}
  1. 自定义过滤器
{{ variable | filter | lower }}

项目新建user_defined文件夹
----templatetags文件夹
----__init__.py
----myfilter.py

在settings.py中INSTALL_APPS中添加'user_defined'

# myfilter.py
from django import template
# 注册过滤器,声明模板对象
register = template.Library()
#声明并定义过滤器
@register.filter
def myreplace(value, args):
    oldValue = args.split(':')[0]
    newValue = args.split(':')[1]
    return value.replace(oldValue, newValue)

models模块,模型与数据库

[models详细介绍: https://blog.csdn.net/qq_3704...]
点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
6个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Bill78 Bill78
4年前
python内存管理机制
1\.内存管理架构第0层:是操作系统提供的内存管理接口,比如c运行时提供的malloc和free接口。这一层是由操作系统实现并管理的,python不能干涉这一层的行为。第1层:基于第0层操作系统提供的内存管理接口包装而成,其目的仅仅是为python提供一层统一的rawmemory的管理接口。提供统一的接口是虽然不同的操
Easter79 Easter79
3年前
ssm+ajax实现登陆
ssm的搭建见上一章1.数据协议层publicUserselectByLoginnameAndPassword(@Param("loginname")Stringloginname,@Param("password")Stringpassword);2.服务协议层 Userlogin(Stringloginnam
Stella981 Stella981
3年前
Python之路【第十七篇】:Django【进阶篇 】(转自银角大王博客)
Model到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞:创建数据库,设计表结构和字段使用MySQLdb来连接数据库,并编写数据访问层代码业务逻辑层去调用数据访问层执行数据库操作!(https://oscimg.oschina.net/oscnet/2f863fee384e3d877
Stella981 Stella981
3年前
SonarQube install on Kubernetes
Sonarqube搭建代码apiVersion:extensions/v1beta1kind:Deploymentmetadata:name:postgreslabels:app:postgresspec:template:
可莉 可莉
3年前
2020,最新Model的设计
很多的app使用MVC设计模式来将“用户交互”与“数据和逻辑”分开,而model其中一个重要作用就是持久化。下文中设计的Model可能不是一个完美的,扩展性强的model范例,但在我需要重构的app中,这样的设计能够满足我的需要。关于ModelModel层包含了app的数据与逻辑,Model层中的类需要关心的是数据的表现,存储,以及操
Stella981 Stella981
3年前
C#里面BLL、Model、DAL、UI层
C三层架构分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)再加上实体类库(Model)1、实体类库(Model),主要存放数据库中的表字段。操作:(1)先建立实体类库Model,打开项目,在解决方案中右键》添加》新建项目》选中类库》改名Model》确定(2)选中Model类库》ShiftALT
Stella981 Stella981
3年前
2020,最新Model的设计
很多的app使用MVC设计模式来将“用户交互”与“数据和逻辑”分开,而model其中一个重要作用就是持久化。下文中设计的Model可能不是一个完美的,扩展性强的model范例,但在我需要重构的app中,这样的设计能够满足我的需要。关于ModelModel层包含了app的数据与逻辑,Model层中的类需要关心的是数据的表现,存储,以及操
Wesley13 Wesley13
3年前
Maven学习总结(八)——使用Maven构建多模块项目
Maven学习总结(八)——使用Maven构建多模块项目  在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层)、dao(数据库访问层)、service(业务逻辑层)、web(表现层),这样分层之后,各个层之
十月飞翔 十月飞翔
3年前
解决数据库高并发访问瓶颈问题
一、缓存式的Web应用程序架构:  在Web层和db层之间加一层cache层,主要目的:减少数据库读取负担,提高数据读取速度。cache存取的媒介是内存,可以考虑采用分布式的cache层,这样更容易破除内存容量的限制,同时增加了灵活性。二、业务拆分:  电商平台,包含了用户、商品、评价、订单等几大模块,最简单的做法就是在一个数据库中分别创建users、sh
CodeMaster7
CodeMaster7
Lv1
用时间和心看人,而不是用眼睛。
文章
4
粉丝
0
获赞
0