aixianfeng项目实战与(2)命名空间与项目部署

1 . settings.py里面的DEBUG

– debug = true的时候方便开发的时候进行调试, 通过查看返回的bug信息来进行纠正bug
– debug = false 调试经过没有错误以后, 都会将debug = false, 自己进行定义错误的页面, 给用户更佳的体验感觉.
– debug = false的时候django不会自动的去帮你处理静态文件和静态图片了, 所以这里我们需要进行一些处理!!

debug=flase的时候静态文件处理:

– 当debug = false的时候, HOST必须设置为:

ALLOWED_HOSTS = ['*']

如:

在工程目录下的urls.py:
from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.staticfiles.urls import static
from django.views.static import serve

from aixianfeng import settings
from users import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^users/', include('users.urls')),
    url(r'^static/(?P<path>.*)$', serve, {'document_root':settings.STATIC_ROOT}), # 配置这个用来DEBUG等于False的时候可以加载静态文件
    url(r'^$', views.home), # 通过空匹配返回首页
    url(r'^media/(?P<path>.*)$', serve, {'document_root': settings.MEDIA_ROOT}),
    # 配置这个用来DEBUG等于False的时候去加载静态图片
]

在工程目录的settings.py里设置如下:

# 配置静态文件
STATIC_URL = '/static/'
# STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')
]
STATIC_ROOT = STATICFILES_DIRS[0]  # 同上

# 配置上传文件路径
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

2. 命名空间

工程目录urls.py:

urlpatterns = [
   url(r'^users/', include('users.urls', namespace='users'),
   ]   # 通过include函数里面包含的项目urls进行命名为users

项目目录urls.py:

urlpatterns = [
    url('^foodtypes/(\d+)/(\d+)/(\d+)/', views.foodtypes, name='foodtype'),
    ]  

那么具体使用该如何呢? 看下面:
我要调用项目下面的foodtypes的方法,并要传递参数value1,value2,value3
在html页面中:

<a href='{% url "users:foodtype value1 value2 value3"}'>点我调用函数并传递参数 </a>

3. 项目流程:

第一天:

1)开发流程—先演示配置好的,并且运行起来的项目
a) 先看运行起来的项目,大致看看开发功能有那些,实现技术要使用那些
b)需要使用的模型创建,字段的定义
c)提供数据—事先准备好插入数据的sql,第二天提供

2) 项目搭建
a)虚拟环境搭建
a1)pychram的解释器interpreter的配置
a2)debug的配置
virtualenv –no-site-packages -p D:/python3/python3.6.exe env

b)创建项目
    b1)创建app
    b2)创建templates
    b3)创建静态文件
    b4)开发接口文档doc目录的创建
    b4)settings.py文件中的installed_app的配置,databases的配置,templates的配置,static的配置,
        login_url = '/login/'
    c5)工程的__init__.py中初始化pymysql,install_as_mysqldb

c)前端页面渲染
    c1)模板的继承,定义base.html,挖坑{% block title%}{% endblock %}以及填坑
    c2)静态css,js,img的渲染。{% load static %}以及直接/static/css/xxx.css

3)功能的梳理
a)框架分析
a1)用户中心
a2)首页商品展示
a3) 闪购(商品列表)
a4)购物车
a4.1)订单系统
a4.2)收货地址
a4.3)支付
a4.4)积分系统
a4.5)vip
a4.6)物流
a4.7)评论系统
a4.8)优惠券
b)开发过程
b1)首页–闪购–购物车–个人模块

4)后端页面渲染
a)编写urls–>views的逻辑
b)把首页/闪购/购物车/我的页面,全部render渲染出来,不用加载数据都可以

扫描二维码关注公众号,回复: 1214276 查看本文章

5)首页展示信息模型定义
a)banner轮播模型定义
b)导航栏模型定义
c)必购模型定义
d)商店模型定义 —->以上模型定义都一样

6)闪购模型定义(FoodType)
a)闪购左侧菜单分类
b)顶测分类
b1)全部类型—-全部分类
b2)综合排序—-综合排序、销量排序、价格排序、价格升序
c)定义搜索url、/axf/market/ID1/ID2/ID3/
c1)ID1:左侧菜单分类id
c2)ID2:全部类型的分类(0)
c3)ID3:综合排序的分类(0,1,2,3)

作业:先演示讲模板拆分为基础模板,然后通过继承挖坑等技术来完成模板的拆分
1)拆分所有的模板
2)页面可点击各模板,展示对应的页面,首页/闪购/购物车/个人中心等
3)登录注册退出—-使用中间件的方式
4)头像上传

第二天:

*)上午演示登录注册注销功能(客户端和服务端都验证令牌的时效)
a) 令牌验证,创建单独的表,存令牌和过期时间
b) cookie中设置缓存时间
1)中间件的配置
a)判断cookies中是否有登录的令牌,如果没有不做任何处理
b)如果cookies中有令牌,则去数据库userticket表中去判断令牌是否有效
c)令牌无效或者过期的话,不做任何处理
d)令牌有效的话,将user的数据给request.user

2) 个人中心模块
a)先验证request中是否有user的信息,如果有则在个人中心页面中渲染用户名,头像图片等信息

  • a1)待付款和待收货的数据刷新,通过user找到order订单表,查看订单表的订单状态

c)没有验证到request中的user信息的话,则在个人中心页面中,展示登录以及注册的按钮的信息

3)购物车页面
a)如果request中没有user的信息,则跳转到登录页面

4)注册
a)ajax在用户名的onblur的点击的时候,执行查询用户名是否重复的请求,并展示查询的结果,用户名重复
或者用户名可用
5)登录

  • a)随机生成ticket,存放在cookies中,设置过期时间
  • b)userticket表中存用户和ticket的信息,以及过期时间,过期时间和cookies中的过期时间一致
    讲解:
    1. 定义首页模型,插入数据
    2. 闪购页面搜索等,搜索的url的格式,方法的定义

第三天:

a)购物车模型 (CartModel)

  • a1)购物车页面展示,购物车中信息展示

b)购物车逻辑分析,模型和订单模型的关联等
b1) 关联用户,关联商品,数量等

d)增加或者删除选购商品数量,使用ajax异步修改数据

  • b1)增加/axf/addtocart/?goodsid=475
  • b2)删除/axf/subtocart/?goodsid=475
  • b3)选中下单的商品,is_select字段,创建订单的时候过滤掉is_select为False的商品数据

e)下单订单生成

  • c1)订单模型order,购物车下单以后生成订单信息,包括用户信息,订单支付状态,订单创建时间等
  • c2)根据订单信息创建订单和商品的表信息,该表中关联订单,关联商品,商品的数量等信息

作业:
1. 删除商品购物车实现
2. 购物车页面中数据展示

第四天:
a)复习所有代码
b)部署 nginx+uwsgi

4. 项目部署的两种实现:

部署11. 安装包
sudo apt update
apt install mysql-server mysql-client
2. 设置远程访问mysql
    a) 查找 mysql.conf 
        find / -name mysql.cnf

    b)注释mysql.cof文件的bind_address
        /etc/mysql/mysql.conf.d

    c)GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root@123' WITH GRANT OPTION;

        flush privileges; 

3. 修改django的配置文件
    a)修改settings.py文件中的DEBUG=FALSE,ALLOWED_HOST=['*']
    b)修改urls.py

        b1)from django.views.static import serve
        url中加入以下配置
        url(r'^static/(?P<path>.*)$', serve, {"document_root": settings.STATIC_ROOT}),
        url(r'^media/(?P<path>.*)$', serve, {"document_root": settings.MEDIA_ROOT}),
        b2)setting中
        STATIC_ROOT = os.path.join(BASE_DIR, 'static')
        b3)url中修改首页访问的地址
        url(r'^$', views.home)


4. 修改首页的启动地址
    修改工程目录中的url ,并修改url(r'^$', views.home)

5. 安装pip3
    apt install python3-pip

6. 安装必备库
    pip3 install django==1.11
    pip3 install pymysql
    pip3 install Pillow

7. 查看进程
    netstat -lntp

5. 启动项目
    python3 manage.py runserver 0.0.0.0:80 #项目部署这个地址可以从任何地址去访问
    nopub python3 manage.py runserver # 通过这个可以在后台运行项目,并且在当前目录下生成一个ouhup.out日志文件,不断输入信息


部署2:
使用nginx+uwsgi配置django项目

1. 安装nginx
sudo apt-get install nginx

2. 查看nginx的状态

systemctl status nginx 查看nginx的状态
systemctl start/stop/enable/disable nginx 启动/关闭/设置开机启动/禁止开机启动

service nginx status/stop/restart/start



3. 安装uwsgi
pip3 install uwsgi

4. nginx的配置文件中加载自定义的nginx的配置文件

    vim /etc/nginx/nginx.conf
    在server中加入以下配置:
    include /home/app/conf/*.conf;


5. 配置自定义的nginx配置文件

    server {
        listen       80;
        server_name 47.92.164.198 localhost;

        access_log /home/app/log/access.log;
        error_log /home/app/log/error.log;

        location / {
            include uwsgi_params;
            uwsgi_pass 127.0.0.1:8890;
        }
        location /static/ {
            alias /home/app/day11axf0/static/;
            expires 30d;
        }

    }


6. 配置uwsgi,名称为uwsgi.ini
    [uwsgi]
    # variables
    projectname = day11axf0
    newprojectname = day11axf
    base = /home/app
    # 以上文件可以不用设置

    # config
    #plugins = python
    master = true
    #protocol = uwsgi
    processes = 4
    #env = DJANGO_SETTINGS_MODULE=%(projectname).settings
    pythonpath = %(base)/%(projectname)
    module = %(newprojectname).wsgi
    socket = 127.0.0.1:8890
    logto = %(base)/log/uwsgi.log


启动方式: uwsgi --ini uwsgi.ini

猜你喜欢

转载自blog.csdn.net/qq_41637554/article/details/80286554
今日推荐