[课程]超细讲解Django打造大型企业官网
课程信息
名称 |
内容 |
课程名 |
超细讲解Django打造大型企业官网 |
链接 |
网易云课堂 |
使用pycharm报错-虚拟环境
1 2
| from django.contrib import admin from django.urls import path
|
如果代码报引用错误,需要检查pycharm的虚拟环境
可能是新建项目时候自动新建了新的虚拟环境
解决办法
在File->Setting->Python Intepreter中,重新修改下项目的python解释器器

新建项目的结构

传参数方式其一
/<id>方式
urls.py
1 2 3 4 5 6 7 8 9 10 11 12 13
| from django.contrib import admin from django.urls import path from django.http import HttpResponse from book import views
def index(request): return HttpResponse('index')
urlpatterns = [ path('', index), path('admin/', admin.site.urls), path('book/detail/<book_id>', views.book_detail), ]
|
book>views.py
{6,7}1 2 3 4 5 6 7 8
| from django.http import HttpResponse
def book(request): return HttpResponse("book")
def book_detail(request, book_id): text = "图书id是:%s" %book_id return HttpResponse(text)
|
settings.py
1 2 3 4 5 6 7 8 9
| INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'book', ]
|
传参数方式其二
/?id=1方式
urls.py
{7}1 2 3 4 5 6 7 8
| from django.urls import path from book import views
urlpatterns = [ path('', views.index), path('book/', views.book), path('book/detail/', views.book_detail), ]
|
book>views.py
{10,12}1 2 3 4 5 6 7 8 9 10 11 12 13
| from django.http import HttpResponse
def index(request): return HttpResponse("index")
def book(request): return HttpResponse("book")
def book_detail(request): id = request.GET.get('id') text = "id:%s" %id return HttpResponse(text)
|
settings.py
1 2 3 4 5 6 7 8 9
| INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'book', ]
|
include函数=>urls模块化
urls.py
1 2 3 4 5 6
| from django.urls import path,include
urlpatterns = [ path('book/',include('book.urls') ) ]
|
book>urls.py
1 2 3 4 5 6 7
| from django.urls import path from . import views
urlpatterns = [ path('', views.book), path('detail/<book_id>', views.book_detail), ]
|
views.py
1 2 3 4 5 6 7 8 9 10 11
| from django.http import HttpResponse
def index(request): return HttpResponse("index")
def book(request): return HttpResponse("book")
def book_detail(request,book_id): text = "id:%s" %book_id return HttpResponse(text)
|
macOS 系统下安装mysqlclient报错
报错信息如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| Collecting mysqlclient Using cached https://files.pythonhosted.org/packages/4d/38/c5f8bac9c50f3042c8f05615f84206f77f03db79781db841898fde1bb284/mysqlclient-1.4.4.tar.gz Installing collected packages: mysqlclient Running setup.py install for mysqlclient ... error ERROR: Command errored out with exit status 1: command: /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/8t/61_51ylx0w5gl8yw560w88740000gn/T/pip-install-n78rgmem/mysqlclient/setup.py'"'"'; __file__='"'"'/private/var/folders/8t/61_51ylx0w5gl8yw560w88740000gn/T/pip-install-n78rgmem/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/8t/61_51ylx0w5gl8yw560w88740000gn/T/pip-record-9oiumy15/install-record.txt --single-version-externally-managed --compile cwd: /private/var/folders/8t/61_51ylx0w5gl8yw560w88740000gn/T/pip-install-n78rgmem/mysqlclient/ Complete output (30 lines): running install running build running build_py creating build creating build/lib.macosx-10.9-x86_64-3.6 creating build/lib.macosx-10.9-x86_64-3.6/MySQLdb copying MySQLdb/__init__.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb copying MySQLdb/_exceptions.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb copying MySQLdb/compat.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb copying MySQLdb/connections.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb copying MySQLdb/converters.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb copying MySQLdb/cursors.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb copying MySQLdb/release.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb copying MySQLdb/times.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb creating build/lib.macosx-10.9-x86_64-3.6/MySQLdb/constants copying MySQLdb/constants/__init__.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb/constants copying MySQLdb/constants/CLIENT.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb/constants copying MySQLdb/constants/CR.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb/constants copying MySQLdb/constants/ER.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb/constants copying MySQLdb/constants/FIELD_TYPE.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb/constants copying MySQLdb/constants/FLAG.py -> build/lib.macosx-10.9-x86_64-3.6/MySQLdb/constants running build_ext building 'MySQLdb._mysql' extension creating build/temp.macosx-10.9-x86_64-3.6 creating build/temp.macosx-10.9-x86_64-3.6/MySQLdb gcc -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -arch x86_64 -g -Dversion_info=(1,4,4,'final',0) -D__version__=1.4.4 -I/usr/local/Cellar/mysql-connector-c/6.1.11/include -I/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -c MySQLdb/_mysql.c -o build/temp.macosx-10.9-x86_64-3.6/MySQLdb/_mysql.o gcc -bundle -undefined dynamic_lookup -arch x86_64 -g build/temp.macosx-10.9-x86_64-3.6/MySQLdb/_mysql.o -L/usr/local/Cellar/mysql-connector-c/6.1.11/lib -lmysqlclient -lssl -lcrypto -o build/lib.macosx-10.9-x86_64-3.6/MySQLdb/_mysql.cpython-36m-darwin.so ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation) error: command 'gcc' failed with exit status 1 ---------------------------------------- ERROR: Command errored out with exit status 1: /Library/Frameworks/Python.framework/Versions/3.6/bin/python3.6 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/8t/61_51ylx0w5gl8yw560w88740000gn/T/pip-install-n78rgmem/mysqlclient/setup.py'"'"'; __file__='"'"'/private/var/folders/8t/61_51ylx0w5gl8yw560w88740000gn/T/pip-install-n78rgmem/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/8t/61_51ylx0w5gl8yw560w88740000gn/T/pip-record-9oiumy15/install-record.txt --single-version-externally-managed --compile Check the logs for full command output.
|
网上说法不一,大部分都是解决centos以及乌班图和windows报错,macOS几乎没有,但还是找到了几种:
http://www.cocoachina.com/cms/wap.php?action=article&id=32193
https://github.com/PyMySQL/mysqlclient-python
最终解决方案是通过以下方式安装:
1
| LDFLAGS=-L/usr/local/opt/openssl/lib pip3 install mysqlclient
|
参考解决方案: https://github.com/PyMySQL/mysqlclient-python/issues/131
出处(原创)): https://www.jianshu.com/p/15fcc5a27a81
解决Python用pip命令安装速度慢,改用国内镜像
第一步:(可忽略直接看第二步解决方案)首先我们看一下Python默认用的是哪个地址的镜像:
在命令行输入 pip help install
找出-i, --index-url <url>
后面对应的地址就是默认的下载源地址:
第二步:解决方案
Python提供了pip命令,让开发者很容易安装需要的模块。但是,用pip安装时,好多模块默认去外网下载。这样,下载速度就变得灰常缓慢。 这里我们提供一种解决方案。。该镜像的下载地址。
国内的一些站点:
豆瓣:http://pypi.douban.com/simple/
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
临时使用方法
直接在安装模块的后面加参数:
-i http://pypi.douban.com/simple/
例如:安装web模块django ,我们这里指定用豆瓣。。
pip install django -i http://pypi.douban.com/simple/
永久性使用
window环境
windows下,直接在user目录中创建一个pip目录,如:C:\Users\xx\pip
,新建文件pip.ini
内容如下:
1 2 3 4
| [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host=mirrors.aliyun.com
|
Linux环境
=修改 ~/.pip/pip.conf (没有的话创建一个,那个“.”必须有, 代表的是隐藏文件夹)
内容如下:
1 2 3 4
| [global] index-url = https://pypi.tuna.tsinghua.edu.cn/simple [install] trusted-host=mirrors.aliyun.com
|
虚拟环境找不到命令的解决办法macOS下
1.升级python包管理工具pip
1
| pip install --upgrade pip
|
备注:当你想升级一个包的时候 pip install --upgrade 包名
2.python虚拟环境安装
1 2
| sudo apt-get install python-virtualenv sudo easy_install virtualenvwrapper
|
上述工具装好后找不到mkvirtualenv
命令,需要执行以下环境变量设置。
1.创建目录用来存放虚拟环境
mkdir $HOME/.virtualenvs
2.在~/.bashrc
中添加行
1 2
| export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh
|
3.运行
3.创建python虚拟环境
mkvirtualenv [虚拟环境名称]
workon [虚拟环境名称]
4.退出虚拟环境
离开 deactivate
5.删除(慎用)
rmvirtualenv [虚拟环境名称]
输出__str__的两种写法
1 2 3 4 5 6 7 8 9 10 11 12 13
| from django.db import models
class Student(models.Model): name = models.CharField(max_length=224, null=False) number = models.IntegerField() teacher = models.ForeignKey('teacher.Teacher', on_delete=models.CASCADE)
class Meta: db_table = 'student' verbose_name = '学生表'
def __str__(self): return "<Student:({id},{name},{number})>".format(id=self.id, name=self.name, number=self.number)
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| from django.db import models
class Teacher(models.Model): name = models.CharField(max_length=200, verbose_name='老师名字') number = models.IntegerField()
class Meta: db_table = 'teacher' verbose_name = '老师表'
def __str__(self): return f"<Teacher:({self.id},{self.name},{self.number})>"
|
python存储文件
1 2 3 4 5 6 7 8 9
| class UploadFiles(View): def post(self, request): file = request.FILES.get('img') path = default_storage.save("static/photo/{}/".format(file.name), file) print(path) return JsonResponse({ "status_code": 200, 'path': path })
|
django实战之gulp自动执行任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| var gulp = require("gulp") var cssnano = require("gulp-cssnano") var rename = require("gulp-rename")
gulp.task("css",function () { gulp.src("./css/*.css") .pipe(cssnano()) .pipe(rename({"suffix":".min"})) .pipe(gulp.dest("./css/dist/")) .pipe(connect.reload()) });
gulp.task("watch",function () { gulp.watch("./css/*.css",['css']) });
|
以后只要在终端执行gulp watch
命令即可自动监听所有的css
文件,然后自动执行css
的任务,完成相应的工作。
Gulp-更改文件后,自动刷新浏览器
以上我们实现了更改一些css
文件后,可以自动执行处理css
的任务。但是我们还是需要手动的去刷新浏览器,才能看到修改后的效果。有什么办法能在修改完代码后,自动的刷新浏览器呢。答案是使用gulp-connect
。gulp-connect
安装的命令如下:
1
| npm install gulp-connect --save-dev
|
gulp-connect
使用的示例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| var gulp = require("gulp") var cssnano = require("gulp-cssnano") var rename = require("gulp-rename") var connect = require("gulp-connect")
gulp.task("connect",function () { connect.server({ port: 3000, root: './', livereload: true }); });
gulp.task("css",function () { gulp.src("./css/*.css") .pipe(cssnano()) .pipe(rename({"suffix":".min"})) .pipe(gulp.dest("./css/dist/")) .pipe(connect.reload()) });
gulp.task("watch",function () { gulp.watch("./css/*.css",['css']) });
gulp.task("server",['connect','watch'])
|
以上我们创建了一个connect
的任务,这个任务会开启一个3000
端口,以后我们在访问html
页面的时候,就需要通过http://127.0.0.1:3000
的方式来访问了。然后接下来我们还定义了一个server
任务。这个任务会去执行connect
和watch
任务,只要修改了css
文件,那么就会执行css
的任务,然后就会自动刷新浏览器。
python一键安装/导出运行环境到requirements.txt
生成: pip freeze > requirements.txt
导出 pip install -r requirements.txt
django给类设置是否登录验证限制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
from rest_framework.permissions import IsAuthenticated
permission_classes = [IsAuthenticated]
class checkTokenView(APIView): permission_classes = [IsAuthenticated]
def get(self, request): print(request.user)
return Response({ 'status': 200 })
|