一、ubuntu下安装
1、虚拟环境安装:参考:http://linux265.com/news/3453.html
2、正常安装:参考:https://www.cnblogs.com/freeweb/p/5210167.html
二、基本命令
1、创建django项目:django-admin.py startproject django项目名
创建django应用:python3 manage.py startapp 应用名
2、本地运行项目:python3 manage.py runserver
校验项目完整性:check
进入python shell环境:python3 manage.py shell
执行用例测试:test
3、数据库相关:
创建模型变更的迁移文件:python3 manage.py makemigrations
执行上一个命令创建的迁移文件:python3 manage.py migrate
数据库数据导出到文件:dumpdata
文件数据导入数据库:loaddata
三、安装前的弯路相关
由于在本机下过Pycharm,所以决定用Pycharm远程操作虚拟机django项目。
1、File|Settings|Project:untitled|Project interpreter|右上角设置小按钮|Add|SSH Interpreter|输入相关,Next|失败,提示:SSH_MSG_DISCONNECT 2 Too many authentication failures。原因:ubuntu默认不开启root登录。
→修改/etc/ssh/sshd_config文件,设置PermitRootLogin为yes。
prohibit-passwd代表:允许root登录,但禁止root用密码登录。
2、重启:
//在 Ubuntu、Debian 和 Linux Mint 上:
# sudo service ssh restart
//在 Fedora、CentOS、RHEL 7上:
# sudo systemctl restart sshd
3、Interpreter:linux服务器的python路径。
Sync folders:django项目在linux服务器的存储路径。
四、windows Pycharm连接linux django
全网有pycharm连接linux已部署django的教程少得可怜。:)
一开始一脸懵逼,后来发现全部装成了pure python的连接。而且到后面的步骤发现不知道各步骤这么做的目的是什么。被各路教程打得懵逼。:)
参考:https://blog.csdn.net/ouyangzhenxin/article/details/81125000
https://blog.csdn.net/qq_35106189/article/details/83378136
1、建立新项目——点击Django——输入本地的项目路径,准备远程的连接。
2、输入虚拟机ip、用户名、密码。
Next后可能出现SSH_MSG_DISCONNECT 2 Too many authentication failures的情况,按三、
操作即可。
3、输入linux服务器上的python路径。建议用python3。点击Finish。
回到New Project页面。可以看到建立远程连接。选择linux上已经部署好的django项目路径。
两个项目名要一样。
More Settings里不用更改,直接保持默认就可以。点击创建。出现下图:
原因还在探索中。不过此处直接点OK不理就可以。
4、同步:从linux端下载文件至本地。
可以打开三角箭头,看到相关文件:
settings.py
:项目配置文件
urls.py
:项目路由配置文件
wsgi.py
:网关接口
manage.py
:主程序;项目管理文件
Templates:静态资源
打开settings文件,更改ALLOWED_HOSTS=['*']
:
5、配置运行
①配置Django server
点击右上方Add Configuration(之前pycharm里没有别的项目就是Add Configuration,有的话点击下拉菜单的Edit Configuration)
点击左上角+号,在弹出的菜单里选Django server。
对Django server进行配置:
增加变量:DJANGO_SETTINGS_MODULE=项目名.settings
。
点击OK返回。远程编译器一般已经默认选好。
②配置python:点击左边的Templates,点击弹出菜单的python。默认已经配置好。点击OK。
③配置pycharm的Settings:
Pycharm左上角File——Settings——Language&Frameworks——Django
点击OK。
6、运行:点击右上方绿色三角。
如下图显示即为成功。
linux上:
windows上:
【FIN】
五、
1、django项目:web应用。django应用:可重用的python软件包。
每个应用可以自行管理模型、视图、模板、路由、静态文件等。
每个项目可含一组配置+多个应用。
2、
views.py:视图
models.py:应用模型
admin.py:定义Admin对象管理模块
apps.py:应用
tests.py:编写应用测试用例
urls.py:自行管理应用路由
3、视图:编写函数逻辑,实现html表达内容的生成、返回。
#app20190331 views.py
from django.http import HttpResponse
def hello(request):
return HttpResponse("Welcome!")
路由:请求无法到达视图函数,路由配置可绑定视图函数和url,使呈现。
→先配置应用路由,再配置项目路由。
#app20190331 urls.py
from django.urls import path,include
import app20190331.views #引入视图文件
urlpatterns=[
path('hello',app20190331.views.hello)
#'hello是域名的分支!可以自己随便起的。访问的时候即http://xxx:8000/app20190331/hello
]
#django0330 urls.py
from django.contrib import admin
from django.urls import path,include
from django.conf.urls import *
from app20190331 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('app20190331/',include('app20190331.urls'))
]
添加应用至配置文件settings:
#django0330 settings.py
#在INSTALLED_APPS数组里添加:
'app20190331.apps.Apps20190331Config'
添加的东西与app20190331的apps.py文件有关。是创建应用时自动初始化的文件。
之后运行。注意网址。
六、模型层
视图与数据库间的组件。实现python对象与数据库表的转换。
1、相关配置:打开django0330的settings.py文件:
2、定义字段:
数字类型:IntegerField
文本类型:TextField
日期类型:DateTimeField
自增ID:AutoField
主键定义:primary_key属性
定义后要进行模型的迁移,从而将定义保存至数据库:
makemigrations:模型的变更生成迁移文件。
migrate:运行迁移文件,将文件内容同步至数据库。
七、Django Shell
Python Shell:交互式编程。Django Shell:继承Django项目环境。
方便临时操作、小范围debug、小范围调试。
八、Django Admin
自己生成的后台管理工具,读取定义的模型元数据,供开发者管理模型、数据。
认证用户、显示管理模型、校验输入。
1、django初始化时默认无管理员用户,需自行创建。
创建超级用户:python3 manage.py createsuperuser
2、查看之前写的博客:将博客模型注册进admin.py文件中。
#app20190331 admin.py
from .model import Article
admin.site.register(Article)
保存,项目自动重新运行。在页面里刷新,可见之前创建的Article。
此时文章默认显示Article object。想要让文章显示title:在models.py进行配置:
#app20190331 models.py
class Article(models.Model):
...
def __str__(self):
return self.title
保存,重新runserver。刷新。title已显示。
九、模板系统
视图文件不适合编写html文件。模板系统是文件,分离文档的表现形式和内容。定义了标签占位符。
1、基本语法:
变量标签:{{变量}}
for循环:{% for x in list %},{% endfor %}
if-else标签:{% if %},{ %else% },{% endif% }
2、相关问题
在项目目录下创建templates/blog/index.html,借助模板语法编写首页。之后在view.py中定义函数:
在url.py中配置,加上:
path('index',app20190331.views.get_index_page)
注意函数后面去掉括号!否则爽歪歪:
之后runserver,输入的网址是:
http:xxxx:8000/应用名/index
而不是blog/index。
否则会出现:
由于之前已经用shell创建过Article对象并存储过数据,所以本以为打开的时候是会有文章显示出来的,结果:
除了标题其余空白,没显示出来。
在网上也找不到。
于是楼主想到用shell打印一下值试试,看看是不是存上了。结果:
不甘心的继续试:
看样子是没存上。如果存上了,上图第一个语句的结果会是:
<QuerySet [<Article:xxx>,<Article:xxx>,...]>
猜测原因是由于连接的是虚拟机,每次用Pycharm重新连接虚拟机的ip都变化,而之前创建并存储了Article对象和之后使用模板不是连着一起进行的,中间pi变了经历过改ip重新连接,从而影响了数据库??【迷茫】
django数据库的基本查询:
get:查询单一结果,如果不存在抛出模型类.DoesNotExist异常。模型类.objects.get(属性='xxx')
all:查询所有结果。模型类.objects.all()
count:查询结果数量。模型类.objects.count()
楼主用以上命令尝试:
好吧看来是真没存上或者存在了我找不到路径的位置上。
注:关于端口被占用:
查询端口:netstat -tunlp|grep 端口号
或lsof -i:端口号
结束进程:kill -s 9 [PID]
关于kill与kill-9:参考https://unix.stackexchange.com/questions/8916/when-should-i-not-kill-9-a-process