BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# os.path.abspath(__file__) 拿到的是当前操作文件的绝对路径
'/Users/apple/Desktop/python-caocaocao/6flask/day05/app/views.py'
# os.path.dirname(os.path.abspath(__file__)) 拿到的是当前操作文件的绝对路径的上一级的绝对路径
'/Users/apple/Desktop/python-caocaocao/6flask/day05/app'
# 拿到的是当前操作文件的绝对路径的上两级的绝对路径os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
'/Users/apple/Desktop/python-caocaocao/6flask/day05'
MEDIA_ROOT = os.apth.join(os.path.join(BASE_DIR,'static'), 'media')
os.path.join(BASE_DIR, 'static')拿到的路径是:
'/Users/apple/Desktop/python-caocaocao/6flask/day05/static'
MEDIA_ROOT = '/Users/apple/Desktop/python-caocaocao/6flask/day05/static/media'
upload_img = request.files.get('img')
# 获取文件或图片: files
path = os.path.join(MEDIA_ROOT, upload_img.filename)
upload_img.save(path)
models.py:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
# 创建存放图片的数据库表
class UploadImg(db.Model):
id = db.Column(db.Integer,
primary_key=True,autoincrement=True)
img = db.Column(db.String(100), nullable=False)
up_img = UploadImg()
upload_path = upload_img.filename
up_img.img = upload_path
db.session.add(up_img)
db.session.commit()
return render_template('img.html', img=up_img)
pip install flask-mail
class Config():
# 邮箱配置
MAIL_SERVER = 'smtp.126.com'
MAIL_PORT = 465
MAIL_USE_TLS = False
MAIL_USE_SSL = True
MAIL_USERNAME = 'cao_xiao_qin@126.com'
MAIL_PASSWORD = 'cao13518479723'
@blue.route('/mail_hello/')
def mail_hello():
msg = Message('title',
sender=Config.MAIL_USERNAME,
recipients=['915710285@qq.com'])
msg.body = '比你优秀的人 还比你努力'
mail.send(msg)
return 'success'
# Config.MAIL_USERNAME = 'cao_xiao_qin@126.com'
# title: 标题
# sender: 发送者
# recipients :接受者
# body: 发送的内容
# send(): 发送
1.进入虚拟环境:source activate
2.创建代码的项目:pyhton manage.py startproject day02
3.更改设置__init__.py设置
import pymysql
pymysql.install_as_MySQLdb()
4.更改setting.py设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dj8',
'USER': 'root',
'HOST': '127.0.0.1',
'PORT': 3306,
'PASSWORD': '123456'
}
}
LANGUAGE_CODE = 'zh-hans'
二、创建应用
` python manage.py startapp <文件名>`
#### 我先创建了一个名为app的应用:
`python manage.py startapp app`
然后在app里面的models.py里定义东西
from django.db import models
class Student(models.Model):
定义s_name字段最长不超过6个字符
unique=True 唯一
s_name = models.CharField(max_length=6, unique=True)
定义s_age字段
s_age = models.IntegerField(default=18)
定义s_gender字段
s_gender = models.BooleanField(default=1)
定义create_time字段 创建时间
create_time = models.DateTimeField(auto_now_add=True)
#### 定义operate_time字段 修改时间 auto_now为每次修改 保存每次修改的时间
operate_time = models.DateTimeField(auto_now=True)
class Meta:
#### 定义模型迁移导数据库的表名
#### 表名为student
db_table = 'student'
Model: 即数据存取层。用于封装于应用程序的业务逻辑相关的数据,以及对数据的处理。说白了就是模型对象负责在数据库中存取数据
View: 即表现层。负责数据的显示和呈现。渲染的html页面给用户,或者返回数据给用户。
Controller: 即业务逻辑层。负责从用户端收集用户的输入,进行业务逻辑处理,包括向模型中发送数据,进行CRUD操作。
严格来说,Django的模式应该是MVT模式,本质上和MVC没什么区别,也是各组件之间为了保持松耦合关系,只是定义上有些许不同。
Model: 负责业务与数据库(ORM)的对象
View: 负责业务逻辑并适当调用Model和Template
Template: 负责把页面渲染展示给用户
注意: Django中还有一个url分发器,也叫作路由。主要用于将url请求发送给不同的View处理,View在进行相关的业务逻辑处理。
pip install virtualenv
```virtualenv –no-site-packages djenv
参数说明: –no-site-packages 是获取一个纯净的python虚拟环境
-p + <版本路径>指定python版本
djenv 是文件名 可以随意(但需见名知意)版本路径>
### 3、进入和退出env
进入: cd djenv 再使用activate命令
注意:mac 需要 source activate命令才能进入
退出: deactivate
### 二、安装Django
安装django
`pip install django==1.11`
查看:
pip list
pip freeze
安装数据库的驱动
`pip install pymysql`
### 三、创建Django项目
`django-admin startproject<文件名>`
例如:django-admin startproject day01
用pycharm打开项目,并使用创建好的虚拟环境
Django目录结构:
.
├── day01
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
终端启动:
`python manage.py runserver IP:PORT`
django启动项目:python manage.py runserver 8080
8080 是指定端口
修改manage.py 中:
`LANGUAGE_CODE = 'zh-hans' `- 字体
`ALLOWED_HOSTS = ['*']`
启动添加0.0.0.0表示允许所有ip访问
### 四、连接数据库
修改manager.py文件
seettings.py数据库配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dj6',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306
}
}
### 安装数据库的驱动
pip install pymysql
修改__init__.py文件 在__init__ 设置里面
因为python3不能直接连接数据库
import pymysql
pymysql.install_as_MySQLdb()
### 生成一些的对应表(映射模型的数据库)
`python manage.py migrate`
### 创建管理用户
python manage.py createsuperuser createsuperuser例如:admin + 密码 ```
访问管理后台(admin)网络查看
` http://127.0.0.1:8000/admin/login/?next=/admin/`
使用centos部署django (上线)
安装命令
yum -y install mariadb mariadb-server
安装完成MariaDB,首先启动MariaDB
systemctl start mariadb
设置开机启动
systemctl enable mariadb
命令: mysql_secure_installation
Enter current password for root:<–初次运行直接回车
设置密码
Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
New password: <– 设置root用户的密码
Re-enter new password: <– 再输入一次你设置的密码
其他配置
Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
初始化MariaDB完成,接下来测试登录
mysql -u root -p
在mysql数据库中的user表中可以看到默认是只能本地连接的,所有可以添加一个新的用户,该用户可以远程访问
# 先使用数据库
use mysql;
# 针对ip
create user 'root'@'192.168.10.10' identified by 'password';
#全部
create user 'root'@'%' identified by 'password';
# 给用户最大权限
grant all privileges on *.* to 'root'@'%' identified by 'password';
# 给部分权限(test 数据库)
grant all privileges on test.* to 'root'@'%' identified by 'password' with grant option;
# 刷新权限表
flush privileges;
# 查看
show grants for 'root'@'localhost';
接下来就可以在远程的数据库可视化工具中直接访问该服务器中的mysql了。
# 访问数据库
mysql -u root -p
在centos中,系统默认只提供python2.7的版本,但是项目我们使用的python3.6的版本。所有我们自己安装python3
首先安装依赖包
安装Python3.6所需要的依赖包:
yum -y groupinstall "Development tools"
yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel
安装Python3.7还需额外安装依赖包:
yum install libffi-devel -y
然后根据自己需求下载不同版本的Python3,我下载的是Python3.6.2
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
然后解压压缩包,进入该目录,安装Python3
tar -xvJf Python-3.6.2.tar.xz
cd Python-3.6.2
./configure --prefix=/usr/local/python3
make && make install
最后创建软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
yum install python-virtualenv
virtualenv --no-site-packages env
cd env
# 激活虚拟环境
source <目录>bin/activate
/home/env/freshenv/bin/pip3 install -r reqyirement.txt
reqyirement.txt文件中记录的是需要安装包的名称以及对应的版本
settings.py设置配置文件
# rest_framework配置
REST_FRAMEWORK = {
# 设置分页
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 2,
# 过滤配置
'DEFAULT_FILTER_BACKENDS': (
'rest_framework.filters.DjangoFilterBackend',
'rest_framework.filters.SearchFilter'
)
}
在视图文件里:
from django.shortcuts import render
from rest_framework import mixins, viewsets
from apps.filters import ArticleFilter
from apps.models import Article
from apps.serializers import ArticleSerializer
class ArticleView(viewsets.GenericViewSet,
mixins.ListModelMixin,
mixins.DestroyModelMixin,
mixins.UpdateModelMixin,
mixins.RetrieveModelMixin,
mixins.CreateModelMixin):
# 查询数据
queryset = Article.objects.filter(is_delete=0)
# 序列化
serializer_class = ArticleSerializer
# 过滤
filter_class = ArticleFilter
在apps/filters.py
import django_filters
from rest_framework import filters
from apps.models import Article
class ArticleFilter(filters.FilterSet):
# 127.0.0.1:8080/apps/article/?t=查询内容&desc=内容
t = django_filters.CharFilter('title', lookup_expr='icontains')
desc = django_filters.CharFilter('desc', lookup_expr='icontains')
create_time_min = django_filters.DateTimeFilter('create', lookup_expr='gt')
create_time_max = django_filters.DateTimeFilter('create', lookup_expr='lt')
class Meta:
model = Article
fields = []
通过postman# 127.0.0.1:8080/apps/article/?t=查询内容&desc=内容&create_time_min=时间
day04
实现重定向:HttpResponseRedirect()
实现渲染:render()
实现响应: HttpResponse()
硬编码例如
'/add/index/', '/add/all_stu/
第一种重定向
return HttpResponseRedirect('/add/index/')
第二种重定向 反向解析reverse(‘namespace:name’) 也就是先定义别名
return HttpResponseRedirect(reverse('dy:all'))