Aula 07 – Curso básico de Django
Criando uma primeira aplicação com Django e mysql no Ubuntu
Configurando o Django para trabalhar com o mysql
https://docs.djangoproject.com/pt-br/1.11/intro/tutorial02/
Depois de criar uma app, é preciso registrá-la no arquivo de configuração do projeto, o settings.py:
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'polls',
]
INSTALLED_APPS possui os nomes de todas as aplicações Django ativas para essa instância do Django.
Aplicações podem ser usadas em múltiplos projetos, e você pode empacotá-las e distribuí-las para uso em outros projetos.
As aplicações que já estão lá por padrão, são incluídas como uma conveniência já que são comuns em vários projetos.
Ainda no settings.py vamos mudar o TIME_ZONE e o LANGUAGE_CODE :
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Para:
# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'pt-br'
TIME_ZONE = 'America/Sao_Paulo'
USE_I18N = True
USE_L10N = True
USE_TZ = True
Vamos criar o banco de dados da app, para isso vamos entrar no console do mysql como usuário root, para isso, digite:
mysql –u root –p
Dá enter, digita a senha e dá enter de novo.
O prompt muda para o mysql.
Crie um usuário chamado django, com privilégio de acesso root.
CREATE USER 'django'@'localhost' IDENTIFIED BY 'sua_senha';
Dê a permissão para o usuário django:
GRANT ALL PRIVILEGES ON *.* TO 'django'@'localhost' IDENTIFIED BY 'sua_senha';
Agora vamos criar o banco de dados da app no mysql:
CREATE DATABASE db_mysite;
Para selecionar o banco use:
USE db_mysite;
Saia do shell do mysql com:
exit
No settings.py vamos mudar a configuração do DATABASE:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_mysite',
'USER': 'django',
'PASSWORD': 'sua_senha',
'HOST': 'localhost', # Or an IP Address that your DB is hosted on
'PORT': '3306',
}
}
Algumas dessas aplicações fazem uso de pelo menos uma tabela no banco de dados, por isso, precisamos criar as tabelas no banco de dados antes de utilizá-las. Para isso rode o comando:
python manage.py migrate
Caso dê erro informando que não encontrou mysqlclient, tente o comando:
pip install mysqlclient
Ou
pip3 install mysqlclient
Depois execute novamente o:
python manage.py migrate
O comando migrate verifica a configuração em INSTALLED_APPS e cria a(s) tabela(s) do banco de dados necessária(s) de acordo com as configurações do banco de dados no seu arquivo mysite/settings.py e as migrações que venham com a app.
É mostrado uma mensagem para cada migração aplicada.
Boa tarde professor. Encontrei um erro na hr de executar o comando pip install mysqlclient para corrigir o erro no migrate, o erro foi o seguinte:
Collecting mysqlclient
Using cached https://files.pythonhosted.org/packages/6f/86/bad31f1c1bb0cc99e88ca2adb7cb5c71f7a6540c1bb001480513de76a931/mysqlclient-1.3.12.tar.gz
Complete output from command python setup.py egg_info:
/bin/sh: 1: mysql_config: not found
Traceback (most recent call last):
File “”, line 1, in
File “/tmp/pip-install-ii7f2c7k/mysqlclient/setup.py”, line 17, in
metadata, options = get_config()
File “/tmp/pip-install-ii7f2c7k/mysqlclient/setup_posix.py”, line 44, in get_config
libs = mysql_config(“libs_r”)
File “/tmp/pip-install-ii7f2c7k/mysqlclient/setup_posix.py”, line 26, in mysql_config
raise EnvironmentError(“%s not found” % (mysql_config.path,))
OSError: mysql_config not found
—————————————-
Command “python setup.py egg_info” failed with error code 1 in /tmp/pip-install-ii7f2c7k/mysqlclient/
Aguardo resposta, obrigado!!!
Olá Vitor, tenta instalar o mysql client lib com:
sudo apt install libmysqlclient-dev
Depois tenta:
pipenv install mysqlclient
ou
pip install mysqlclient
Qualquer coisa me fala, abs.
Toti
olá bom dia, ao executar o comando python manage.py migrate aparece isso:
Traceback (most recent call last):
File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 216, in ensure_connection
self.connect()
File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 194, in connect
self.connection = self.get_new_connection(conn_params)
File “/home/romulo/django_codes/django/django/db/backends/mysql/base.py”, line 227, in get_new_connection
return Database.connect(**conn_params)
File “/home/romulo/django_codes/AmbientePython3/lib/python3.6/site-packages/MySQLdb/__init__.py”, line 85, in Connect
return Connection(*args, **kwargs)
File “/home/romulo/django_codes/AmbientePython3/lib/python3.6/site-packages/MySQLdb/connections.py”, line 204, in __init__
super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1045, “Access denied for user ‘django’@’localhost’ (using password: NO)”)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File “manage.py”, line 15, in
execute_from_command_line(sys.argv)
File “/home/romulo/django_codes/django/django/core/management/__init__.py”, line 381, in execute_from_command_line
utility.execute()
File “/home/romulo/django_codes/django/django/core/management/__init__.py”, line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File “/home/romulo/django_codes/django/django/core/management/base.py”, line 323, in run_from_argv
self.execute(*args, **cmd_options)
File “/home/romulo/django_codes/django/django/core/management/base.py”, line 361, in execute
self.check()
File “/home/romulo/django_codes/django/django/core/management/base.py”, line 390, in check
include_deployment_checks=include_deployment_checks,
File “/home/romulo/django_codes/django/django/core/management/commands/migrate.py”, line 64, in _run_checks
issues = run_checks(tags=[Tags.database])
File “/home/romulo/django_codes/django/django/core/checks/registry.py”, line 72, in run_checks
new_errors = check(app_configs=app_configs)
File “/home/romulo/django_codes/django/django/core/checks/database.py”, line 10, in check_database_backends
issues.extend(conn.validation.check(**kwargs))
File “/home/romulo/django_codes/django/django/db/backends/mysql/validation.py”, line 9, in check
issues.extend(self._check_sql_mode(**kwargs))
File “/home/romulo/django_codes/django/django/db/backends/mysql/validation.py”, line 13, in _check_sql_mode
with self.connection.cursor() as cursor:
File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 255, in cursor
return self._cursor()
File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 232, in _cursor
self.ensure_connection()
File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 216, in ensure_connection
self.connect()
File “/home/romulo/django_codes/django/django/db/utils.py”, line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 216, in ensure_connection
self.connect()
File “/home/romulo/django_codes/django/django/db/backends/base/base.py”, line 194, in connect
self.connection = self.get_new_connection(conn_params)
File “/home/romulo/django_codes/django/django/db/backends/mysql/base.py”, line 227, in get_new_connection
return Database.connect(**conn_params)
File “/home/romulo/django_codes/AmbientePython3/lib/python3.6/site-packages/MySQLdb/__init__.py”, line 85, in Connect
return Connection(*args, **kwargs)
File “/home/romulo/django_codes/AmbientePython3/lib/python3.6/site-packages/MySQLdb/connections.py”, line 204, in __init__
super(Connection, self).__init__(*args, **kwargs2)
django.db.utils.OperationalError: (1045, “Access denied for user ‘django’@’localhost’ (using password: NO)”)
Olá Romulo Sobreira, tudo bem?
Desculpe a demora, mas, ando um pouco ocupado.
Cara, o problema é com as credenciais do MySql, alguma coisa de senha e permissão, você criou um usuário chamado django, com privilégio de acesso root como mostrado na parte escrita do tutorial?
É que quando gravei o vídeo da aula, não mostrei como criar o usuário django (ou qualquer outro nome). No vídeo eu mostrei usando o usuário root do MySql. Mas, por uma questão de segurança e organização é aconselhável criar um usuário chamado django, ou qualquer outro nome que queira, com privilégio de administrador, isso pode evitar inclusive esse erro que deu aí com você.
Dá uma conferida também no seu settings.py, na parte:
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘DB_NAME’,
‘USER’: ‘DB_USER’,
‘PASSWORD’: ‘DB_PASSWORD’,
‘HOST’: ‘localhost’, # Or an IP Address that your DB is hosted on
‘PORT’: ‘3306’,
}
}
Em ‘NAME’ você vai colocar ‘db_mysite’, se esse for o nome do seu database, em ‘USER’ vai colocar ‘django’e ‘PASSWORD’ sua password do mysql.
Vê se seu user e senha batem corretamente com o user e senha que você definiu.
Se não conseguir resolver, me passa mais detalhes.
Abs
Toti
Caso alguém tenha mais erros tente fazer as seguintes instalações antes do migrate
sudo apt install build-essential
sudo apt install libmysqlclient21
sudo apt install libmysqlclient-dev
pip3 install mysqlclient