Maison développement back-end Tutoriel Python Projet Django téléchargement et accès pratiques à l'avatar de l'utilisateur

Projet Django téléchargement et accès pratiques à l'avatar de l'utilisateur

Apr 21, 2018 pm 02:49 PM
django 头像 用户

Cet article présente principalement les exemples pratiques de téléchargement et d'accès aux avatars des utilisateurs dans les projets Django. Maintenant, je les partage avec vous et leur donne une référence. Jetons un coup d'oeil ensemble

1 Enregistrez le fichier localement sur le serveur

upload.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
  {% csrf_token %}
  <p>用户名:<input type="text" name="username"></p>
  <p>头像<input type="file" name="avatar"></p>
  <input type="submit" value="提交">
</form>
</body>
</html>
Copier après la connexion

urls.py

from django.conf.urls import url
from app01 import views
urlpatterns = [
  url(r&#39;^upload&#39;,views.upload)
]
Copier après la connexion

views.py

from django.shortcuts import render,HttpResponse 
def upload(request):
  if request.method == &#39;POST&#39;:
    name = request.POST.get(&#39;username&#39;)
    avatar = request.FILES.get(&#39;avatar&#39;)
    with open(avatar.name,&#39;wb&#39;) as f:
      for line in avatar:
        f.write(line)
    return HttpResponse(&#39;ok&#39;)
  return render(request,&#39;upload.html&#39;)
Copier après la connexion

Résumé

De cette façon, nous avons réalisé un petit exemple basique de téléchargement de fichiers. Il y a quelques points à noter ici :
1. La vérification csrf_token doit être ajoutée au formulaire
2. La valeur de type de la zone de saisie du fichier est file
3. Pour obtenir le fichier dans la fonction d'affichage, utilisez la requête.FILES Méthode .get()
4. Le nom du fichier peut être obtenu via obj.name

2 Téléchargez le fichier dans la base de données

models.py

from django.db import models
 class User(models.Model):
  username = models.CharField(max_length=16)
  avatar = models.FileField(upload_to=&#39;avatar&#39;)
Copier après la connexion

views.py

def upload(request):
  if request.method == &#39;POST&#39;:
    name = request.POST.get(&#39;username&#39;)
    avatar = request.FILES.get(&#39;avatar&#39;)
    models.User.objects.create(username=name,avatar=avatar)
    return HttpResponse(&#39;ok&#39;) 
  return render(request,&#39;upload.html&#39;)
Copier après la connexion

Résumé

La fonction de téléchargement de fichiers dans la base de données a été implémentée ci-dessus. Il y a quelques points à noter :
1. Le. ce qu'on appelle le téléchargement vers la base de données ne signifie pas placer l'image elle-même ou le code binaire dans la base de données. En fait, le fichier est téléchargé sur le serveur localement. La base de données stocke uniquement le chemin d'un fichier, de sorte que lorsque l'utilisateur le souhaite. pour appeler le fichier, il peut se rendre à l'emplacement spécifié par le serveur via le chemin.
2. Lors de la création d'un ORM, le champ avatar doit être Il y a un attribut upload_to='', qui précise où mettre le fichier téléchargé. file
3. Lors de l'ajout à la base de données, l'attribution de l'attribut du champ de fichier est de la même forme que le champ ordinaire, tel que : models.User.objects create(username=name,avatar=avatar)
4. . Si les noms de fichiers téléchargés par deux utilisateurs sont identiques, le système renommera automatiquement le fichier. L'effet est le suivant :

Supplémentaire<. La fonction 🎜>

a été implémentée. Il semble que lorsque nous appelons le fichier, il suffit d'accéder à l'image via le fichier lui-même qui a été enregistré dans le chemin du fichier de la base de données, pour le créer. apparaître sur la page Web, ce n'est pas réellement le cas.


Nous devons configurer certaines choses pour que Django puisse le trouver, sinon il ne passera pas la vérification des URL, et c'est pourquoi nous le pouvons. L'accès direct aux fichiers statiques en statique est dû au fait que Django a déjà été configuré pour nous.


Les étapes de configuration sont les suivantes :


1. Configurez


dans les paramètres du site. .py

MEDIA_ROOT=os.path.join(BASE_DIR,"blog","media") #blog是项目名,media是约定成俗的文件夹名

MEDIA_URL="/media/"   # 跟STATIC_URL类似,指定用户可以通过这个路径找到文件
Copier après la connexion

2. Configurer dans urls.py


from django.views.static import serve
from upload import settings        #upload是站点名
url(r&#39;^media/(?P<path>.*)$&#39;, serve, {&#39;document_root&#39;: settings.MEDIA_ROOT}),
Copier après la connexion

Après la configuration , vous pouvez accéder à l'image via http://127.0.0.1:8001/media/milk.png


3 Utilisez AJAX pour soumettre des fichiers

upload.html


<!DOCTYPE html>

<html lang="en">
<head>
  <meta charset="UTF-8">
</head>
<body>
<form>
  {% csrf_token %}
  <p>用户名:<input id="name-input" type="text"></p>

  <p>头像<input id="avatar-input" type="file"></p>
  <input id="submit-btn" type="button" value="提交">
</form>
<script src="/static/js/jquery-3.2.1.min.js"></script>
<script>
  $(&#39;#submit-btn&#39;).on(&#39;click&#39;,function () {
    formdata = new FormData();
    formdata.append(&#39;username&#39;,$(&#39;#name-input&#39;).val());
    formdata.append("avatar",$("#avatar")[0].files[0]);
    formdata.append("csrfmiddlewaretoken",$("[name=&#39;csrfmiddlewaretoken&#39;]").val()); 
 $.ajax({
 processData:false,contentType:false,url:&#39;/upload&#39;, type:&#39;post&#39;, data:formdata,success:function (arg)
 { 
if (arg.state == 1){ alert(&#39;成功!&#39;) }
else { alert(&#39;失败!&#39;) } } }) });
 </script>
 </body> 
</html>
Copier après la connexion

views.py


from django.shortcuts import render,HttpResponse
from django.http import JsonResponse
from app01 import models
def upload(request):
  if request.method == &#39;POST&#39;:
    name = request.POST.get(&#39;username&#39;)
    avatar = request.FILES.get(&#39;avatar&#39;)
    try:
      models.User.objects.create(username=name,avatar=avatar)
      data = {&#39;state&#39;:1}
    except:
      data = {&#39;state&#39;:0}
    return JsonResponse(data)
  return render(request,&#39;upload.html&#39;)
Copier après la connexion

Résumé


1. Lors du téléchargement Ajax, la saisie du bouton ne doit pas utiliser submit

2 Lorsque Ajax télécharge, la valeur du paramètre data n'est plus un dictionnaire ordinaire. ' tapez la valeur, mais un objet FormData

  1. Créez un objet formdata = new FormData();

  2. Ajoutez-y une valeur formdata. username',$('#name-input').val());

3. Ajax doit ajouter une vérification csrf lors de la soumission de la publication

<🎜. >
    formdata.append("csrfmiddlewaretoken",$("[name='csrfmiddlewaretoken']").val());
  1. 4. , il doit y avoir deux réglages de paramètres

    processData:false
  1. contentType:false
4 Il existe une fonction d'aperçu lors du téléchargement de fichiers image


<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
</head>
<body>
<form>
  <!----用一个label标签将上传文件输入框跟图片绑定一起,
     点击图片的时候就相当于点击了上传文件的按钮---->
  <label><img id="avatar-img" src="/static/img/default.png" width="80px" height="80px">
    <p>头像<input id="avatar-input" hidden type="file"></p>

  </label>
  <input id="submit-btn" type="button" value="提交">
</form>
<script src="/static/js/jquery-3.2.1.min.js"></script>
<script>
  // 上传文件按钮(label里的图片)点击事件
  $(&#39;#avatar-input&#39;).on(&#39;change&#39;,function () {
    // 获取用户最后一次选择的图片
    var choose_file=$(this)[0].files[0];
    // 创建一个新的FileReader对象,用来读取文件信息
    var reader=new FileReader();
    // 读取用户上传的图片的路径
    reader.readAsDataURL(choose_file);
    // 读取完毕之后,将图片的src属性修改成用户上传的图片的本地路径
    reader.onload=function () {
       $("#avatar-img").attr("src",reader.result)
    }
  });
</script>
Copier après la connexion

5 Résumé


Pour le téléchargement de fichiers, qu'il s'agisse d'une soumission directe par formulaire ou d'une soumission Ajax, le problème fondamental est d'indiquer au navigateur que ce que vous souhaitez télécharger est un fichier et non une chaîne ordinaire


Comment le savoir au navigateur est de demander le paramètre ContentType du poids Nous n'avons pas besoin de le spécifier lors du téléchargement d'une chaîne normale, car il a une valeur par défaut,


Si vous le souhaitez. transférer des fichiers, vous devez le spécifier séparément. Pour résumer les points suivants

1. Pour le téléchargement de formulaire, ContentType est spécifié via enctype="multipart/form-data"

2. Pour le téléchargement ajax, ContentType est spécifié via processData:false et contentType:false
3. Lorsque le formulaire est téléchargé, les données du fichier sont "encapsulées" via la balise
4. Lorsque l'ajax est téléchargé, les données sont ajoutées via un objet d'instance FormData. Transmettez simplement cet objet lors de sa transmission
5. Une fois les données transmises, elles sont encapsulées dans request.FILES au lieu de request.POST


Recommandations associées :

Comment Django charge les fichiers CSS et js et les images statiques

Explication détaillée de l'utilisation des contrôles Django et de la transmission des paramètres

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser le compte Xiaohongshu pour trouver des utilisateurs ? Puis-je retrouver mon numéro de téléphone portable ? Comment utiliser le compte Xiaohongshu pour trouver des utilisateurs ? Puis-je retrouver mon numéro de téléphone portable ? Mar 22, 2024 am 08:40 AM

Avec le développement rapide des médias sociaux, Xiaohongshu est devenue l'une des plateformes sociales les plus populaires. Les utilisateurs peuvent créer un compte Xiaohongshu pour montrer leur identité personnelle et communiquer et interagir avec d'autres utilisateurs. Si vous avez besoin de trouver le numéro Xiaohongshu d’un utilisateur, vous pouvez suivre ces étapes simples. 1. Comment utiliser le compte Xiaohongshu pour trouver des utilisateurs ? 1. Ouvrez l'application Xiaohongshu, cliquez sur le bouton « Découvrir » dans le coin inférieur droit, puis sélectionnez l'option « Notes ». 2. Dans la liste des notes, recherchez la note publiée par l'utilisateur que vous souhaitez rechercher. Cliquez pour accéder à la page de détails de la note. 3. Sur la page de détails de la note, cliquez sur le bouton « Suivre » sous l'avatar de l'utilisateur pour accéder à la page d'accueil personnelle de l'utilisateur. 4. Dans le coin supérieur droit de la page d'accueil personnelle de l'utilisateur, cliquez sur le bouton à trois points et sélectionnez « Informations personnelles »

Connectez-vous à Ubuntu en tant que superutilisateur Connectez-vous à Ubuntu en tant que superutilisateur Mar 20, 2024 am 10:55 AM

Dans les systèmes Ubuntu, l'utilisateur root est généralement désactivé. Pour activer l'utilisateur root, vous pouvez utiliser la commande passwd pour définir un mot de passe, puis utiliser la commande su- pour vous connecter en tant que root. L'utilisateur root est un utilisateur disposant de droits d'administration système illimités. Il dispose des autorisations nécessaires pour accéder et modifier les fichiers, la gestion des utilisateurs, l'installation et la suppression de logiciels et les modifications de la configuration du système. Il existe des différences évidentes entre l'utilisateur root et les utilisateurs ordinaires. L'utilisateur root possède la plus haute autorité et des droits de contrôle plus étendus sur le système. L'utilisateur root peut exécuter des commandes système importantes et modifier des fichiers système, ce que les utilisateurs ordinaires ne peuvent pas faire. Dans ce guide, j'explorerai l'utilisateur root Ubuntu, comment se connecter en tant que root et en quoi il diffère d'un utilisateur normal. Avis

Qu'est-ce que sudo et pourquoi est-ce important ? Qu'est-ce que sudo et pourquoi est-ce important ? Feb 21, 2024 pm 07:01 PM

sudo (exécution du superutilisateur) est une commande clé dans les systèmes Linux et Unix qui permet aux utilisateurs ordinaires d'exécuter des commandes spécifiques avec les privilèges root. La fonction de sudo se reflète principalement dans les aspects suivants : Fournir un contrôle des autorisations : sudo réalise un contrôle strict sur les ressources système et les opérations sensibles en autorisant les utilisateurs à obtenir temporairement les autorisations de superutilisateur. Les utilisateurs ordinaires ne peuvent obtenir des privilèges temporaires via sudo qu'en cas de besoin et n'ont pas besoin de se connecter en permanence en tant que superutilisateur. Sécurité améliorée : en utilisant sudo, vous pouvez éviter d'utiliser le compte root lors des opérations de routine. L'utilisation du compte root pour toutes les opérations peut entraîner des dommages inattendus au système, car toute opération incorrecte ou imprudente bénéficiera de toutes les autorisations. et

Django vs Flask : une analyse comparative des frameworks Web Python Django vs Flask : une analyse comparative des frameworks Web Python Jan 19, 2024 am 08:36 AM

Django et Flask sont tous deux leaders dans les frameworks Web Python, et ils ont tous deux leurs propres avantages et scénarios applicables. Cet article procédera à une analyse comparative de ces deux frameworks et fournira des exemples de code spécifiques. Introduction au développement Django est un framework Web complet, son objectif principal est de développer rapidement des applications Web complexes. Django fournit de nombreuses fonctions intégrées, telles que ORM (Object Relational Mapping), formulaires, authentification, backend de gestion, etc. Ces fonctionnalités permettent à Django de gérer de grandes

Avantages et inconvénients du framework Django : tout ce que vous devez savoir Avantages et inconvénients du framework Django : tout ce que vous devez savoir Jan 19, 2024 am 09:09 AM

Django est un framework de développement complet qui couvre tous les aspects du cycle de vie du développement Web. Actuellement, ce framework est l’un des frameworks Web les plus populaires au monde. Si vous envisagez d'utiliser Django pour créer vos propres applications Web, vous devez alors comprendre les avantages et les inconvénients du framework Django. Voici tout ce que vous devez savoir, y compris des exemples de code spécifiques. Avantages de Django : 1. Développement rapide : Djang peut développer rapidement des applications Web. Il fournit une bibliothèque riche et interne

Analyse du mécanisme de stockage des mots de passe utilisateur dans le système Linux Analyse du mécanisme de stockage des mots de passe utilisateur dans le système Linux Mar 20, 2024 pm 04:27 PM

Analyse du mécanisme de stockage du mot de passe utilisateur dans le système Linux Dans le système Linux, le stockage du mot de passe utilisateur est l'un des mécanismes de sécurité très importants. Cet article analysera le mécanisme de stockage des mots de passe des utilisateurs dans les systèmes Linux, y compris le stockage crypté des mots de passe, le processus de vérification des mots de passe et la manière de gérer en toute sécurité les mots de passe des utilisateurs. Dans le même temps, des exemples de code spécifiques seront utilisés pour démontrer le processus opérationnel réel de stockage des mots de passe. 1. Stockage crypté des mots de passe Dans les systèmes Linux, les mots de passe des utilisateurs ne sont pas stockés dans le système en texte brut, mais sont cryptés et stockés. L

Comment changer le nom du compte et l'avatar dans Win10 - Guide détaillé étape par étape Comment changer le nom du compte et l'avatar dans Win10 - Guide détaillé étape par étape Jan 14, 2024 pm 01:45 PM

Après avoir enregistré un compte Win10, de nombreux amis estiment que leurs avatars par défaut ne sont pas très beaux. Pour cette raison, ils souhaitent modifier leurs avatars. Voici un tutoriel sur la façon de modifier leurs avatars. Si vous voulez savoir, vous pouvez. venez jeter un oeil. Comment changer le nom et l'avatar du compte win10 : 1. Cliquez d'abord sur le coin inférieur gauche pour commencer. 2. Cliquez ensuite sur l'avatar ci-dessus dans le menu contextuel. 3. Après avoir entré, cliquez sur « Modifier les paramètres du compte ». 4. Cliquez ensuite sur « Parcourir » sous l'avatar. 5. Recherchez la photo que vous souhaitez utiliser comme avatar et sélectionnez-la. 6. Enfin, la modification est terminée avec succès.

Comment mettre à niveau la version de Django : étapes et considérations Comment mettre à niveau la version de Django : étapes et considérations Jan 19, 2024 am 10:16 AM

Comment mettre à niveau la version de Django : étapes et considérations, exemples de code spécifiques requis Introduction : Django est un puissant framework Web Python qui est continuellement mis à jour et mis à niveau pour offrir de meilleures performances et plus de fonctionnalités. Cependant, pour les développeurs utilisant des versions plus anciennes de Django, la mise à niveau de Django peut rencontrer certains défis. Cet article présentera les étapes et les précautions à suivre pour mettre à niveau la version de Django et fournira des exemples de code spécifiques. 1. Sauvegardez les fichiers du projet avant de mettre à niveau Djan

See all articles